Agregar condición de resalte de celda al código
Tengo el siguiente código y lo que hace es resaltar cualquier coincidencia de dos cifras en sus diferentes posiciones en la celda de acuerdo a una distancia de 4 celdas hacia abajo de la columna como a la fila de su derecha, y lo hace perfecto pero me gustaría agregarle una condición al código así:
Me gustaría que se resalten solamente aquellas celdas que repiten la misma coincidencia tres veces en esa misma distancia de celdas hacia abajo o hacia la derecha de esa misma fila y si hubiera un número que coincida con cualquiera de los números resaltados en la fila o columna y no se repita tres veces que no se resalte; por ejemplo en la misma fila 1 columna e1 está el 9820 y en la columna h1 el 9845 y el la columna k1 el 9863 se resaltarian las tres celdas ya que sus dos primeras cifras se repiten, pero digamos que en esa misma fila está en la columna g1 el 7863 y como está el 9863 en la columna k1 se resalta por sus dos últimas cifras y eso es lo que quisiera evitar que si hay algún número que coincida tanto en columna como en fila y no se repita 3 veces que se evite resaltar
Gracias
Sub recorre2()'el arreglo seria en este codigo
Application.ScreenUpdating = False
Dim Rango As Range
Set Rango = Range("E1:" & UltimaColumna & UltimaFila)
For Each rg In Rango ' recorre el rango
If rg <> "" Then
For i = 1 To 4 ' comprueba derecha
If rg.Offset(0, i) <> "" Then ' si la celda no esta vacia
tinta = Comprueba(rg.Value, rg.Offset(0, i))
If tinta <> 0 Then
Coloreacelda rg. Address, tinta ' colorea la celda inicial
coloreacelda rg.Offset(0, i). Address, tinta ' colorea la celda final
End If
End If
Next
For i = 1 To 4 ' comprueba abajo
If rg.Offset(i, 0) <> "" Then ' si la celda no esta vacia
tinta = Comprueba(rg.Value, rg.Offset(i, 0))
If tinta <> 0 Then
Coloreacelda rg. Address, tinta ' colorea la celda inicial
coloreacelda rg.Offset(i, 0). Address, tinta ' colorea la celda final
End If
End If
Next
End If
Next
Application.ScreenUpdating = True
End Sub
Function Comprueba(Num1 As String, Num2 As String) As Integer
Dim n1(3) As Variant
Dim n2(3) As Variant
For i = 0 To 3 ' llena los arrays numero a numero
n1(i) = Mid(Num1, i + 1, 1)
n2(i) = Mid(Num2, i + 1, 1)
Next
If n1(0) = n2(0) And n1(1) = n2(1) Then Comprueba = 1: Exit Function 'dos primeras
If n1(1) = n2(1) And n1(2) = n2(2) Then Comprueba = 2: Exit Function 'dos del centro
If n1(2) = n2(2) And n1(3) = n2(3) Then Comprueba = 3: Exit Function 'dos ultimas
If n1(1) = n2(1) And n1(3) = n2(3) Then Comprueba = 4: Exit Function 'segunda y cuarta
If n1(0) = n2(0) And n1(3) = n2(3) Then Comprueba = 5: Exit Function 'primera y cuarta
If n1(0) = n2(0) And n1(2) = n2(2) Then Comprueba = 6: Exit Function 'primera y tercera
Comprueba = 0
End Function
Sub coloreacelda(cl As String, color As Variant)
Dim celda As Range
Set celda = Range(cl)
'esta linea hace que mantenga el color asignado
'anteriormente en caso de duplicidad de coincidencia
If celda.Font.color <> vbBlack Then Exit Sub
Select Case color
Case 1
pinta = RGB(126, 126, 23) 'amarillo
Case 2
pinta = RGB(2, 80, 28) 'verde
Case 3
pinta = RGB(160, 11, 97) 'morado
Case 4, 5, 6
pinta = vbRed 'rojo
End Select
celda.Font.color = pinta ' color del texto
celda.Interior.color = RGB(208, 205, 258) ' color interior de la celda
End Sub
Function UltimaColumna() ' busca la ultima columna, fila ocupada
Dim rg As Range
Set rg = Cells.Find(What:="*", _
After:=Cells(1, 1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not rg Is Nothing Then
UltimaColumna = Split(rg.Address, "$")(1)
Else
UltimaColumna = "z1"
End If
End Function
Function UltimaFila()
Dim rg As Range
Set rg = Cells.Find(What:="*", _
After:=Cells(1, 1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not rg Is Nothing Then
UltimaFila = rg.Row
Else
UltimaFila = 1
End If
End Function
