Quiero dar formato a una hoja de excel con datos duplicados, pero sólo quiero que me señale los datos que estén duplicados en celdas contiguas. Por ejemplo 0 - 0 -1 -0 - 1 - 2 -3 sólo quiero que me dé formato a los dos ceros que están juntos. Muchas graciqas.
1 Respuesta
Respuesta de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
Prueba con el siguiente código. Si no he entendido mal es, más o menos, lo que quieres. De todas formas pienso que lo puedes retocar tu mismo para ajustarlo a tus necesidades. Option Explicit Sub marcarDuplicadosJuntos() Dim miHoja As Worksheet Dim ultimaCelda As String Dim maxLin As Long Dim maxCol As Long Dim i As Integer Dim j As Integer Set miHoja = ActiveSheet ' Localizamos la última fila y columna de la página ultimaCelda = miHoja.Cells.SpecialCells(xlCellTypeLastCell).Address maxLin = miHoja.Cells.SpecialCells(xlCellTypeLastCell).Row maxCol = miHoja.Cells.SpecialCells(xlCellTypeLastCell).Column ' Quitamos el fondo a todas las celdas de la página miHoja.Range("A1:" & ultimaCelda).Interior.ColorIndex = xlNone ' Comprobamos los duplicados por columnas For i = 1 To maxLin For j = 1 To maxCol - 1 If miHoja.Cells(i, j) = miHoja.Cells(i, j + 1) Then ' Marcamos las dos celdas miHoja.Cells(i, j).Interior.ColorIndex = 6 miHoja.Cells(i, j).Interior.Pattern = xlSolid miHoja.Cells(i, j + 1).Interior.ColorIndex = 6 miHoja.Cells(i, j + 1).Interior.Pattern = xlSolid End If Next j Next i ' Y hacemos lo mismo por filas For j = 1 To maxCol For i = 1 To maxLin - 1 If miHoja.Cells(i, j) = miHoja.Cells(i + 1, j) Then ' Marcamos las dos celdas miHoja.Cells(i, j).Interior.ColorIndex = 6 miHoja.Cells(i, j).Interior.Pattern = xlSolid miHoja.Cells(i + 1, j).Interior.ColorIndex = 6 miHoja.Cells(i + 1, j).Interior.Pattern = xlSolid End If Next i Next j ' Terminado MsgBox "Ya están marcadas las celdas adyacentes iguales" End Sub
Perdón por la pregunta, pero no me expliqué bien. Lo que tengo es una quiniela en una única columna y lo que quiero es dar formato sólo y exclusivamente a los signos iguales que estén consecutivos. Por ejemplo, si salen dos (ó 3 ó 4, ...) unos seguidos me los marque por ejemplo en rojo, si son POR seguidas, me las marque en verde y si son doses me las marque en azul. Muchas gracias.
Entonces quita la parte del código que busca los duplicados por columnas y deja la comprobación por filas. El código quedará así: Option Explicit Sub marcarDuplicadosJuntos() Dim miHoja As Worksheet Dim ultimaCelda As String Dim maxLin As Long Dim maxCol As Long Dim i As Integer Dim j As Integer Set miHoja = ActiveSheet ' Localizamos la última fila y columna de la página ultimaCelda = miHoja.Cells.SpecialCells(xlCellTypeLastCell).Address maxLin = miHoja.Cells.SpecialCells(xlCellTypeLastCell).Row maxCol = miHoja.Cells.SpecialCells(xlCellTypeLastCell).Column ' Quitamos el fondo a todas las celdas de la página miHoja.Range("A1:" & ultimaCelda).Interior.ColorIndex = xlNone ' Comprobamos los duplicados por filas For j = 1 To maxCol For i = 1 To maxLin - 1 If miHoja.Cells(i, j) = miHoja.Cells(i + 1, j) Then ' Marcamos las dos celdas miHoja.Cells(i, j).Interior.ColorIndex = 6 miHoja.Cells(i, j).Interior.Pattern = xlSolid miHoja.Cells(i + 1, j).Interior.ColorIndex = 6 miHoja.Cells(i + 1, j).Interior.Pattern = xlSolid End If Next i Next j ' Terminado MsgBox "Ya están marcadas las celdas adyacentes iguales" End Sub
Muchas gracias, pero tengo 2 pequeños problemas 1º Me aplica el formato a toda la hoja 2º Quiero aplicar color según el valor de las celdas duplicadas (1 en rojo, por en verde y 2 en azul)
Si es que hay que sacarte los detalles con calzador. Prueba con este código: Option Explicit Sub marcarDuplicadosJuntos() Const celdaInicial = "B2" ' Poner la primera celda de resultados 1x2 Const celdaFinal = "B16" ' Poner la última celda de resultados 1x2 Dim miRango As Range Dim i As Integer Dim j As Integer Dim val1 As String Dim val2 As String Dim nuevoColor As String Dim nColor As Integer Set miRango = ActiveSheet.Range(celdaInicial & ":" & celdaFinal) ' Quitamos el fondo a todas las celdas del rango miRango.Interior.ColorIndex = xlNone ' Comprobamos los duplicados por filas For j = 1 To miRango.Columns.Count For i = 1 To miRango.Rows.Count - 1 val1 = UCase$(miRango.Cells(i, j).Value2) val2 = UCase$(miRango.Cells(i + 1, j).Value2) If val1 = val2 Then Select Case miRango.Cells(i, j) Case 1, "1": nuevoColor = "Rojo" Case "X", "x": nuevoColor = "Verde" Case 2, "2": nuevoColor = "Azul" Case Else: If val1 = "" Then nuevoColor = "nada" Else nuevoColor = "Gris" End Select Select Case nuevoColor Case "Rojo": nColor = 3 Case "Azul": nColor = 41 Case "Verde": nColor = 4 Case "Gris": nColor = 15 End Select ' Marcamos las dos celdas con el color correspondiente miRango.Cells(i, j).Interior.ColorIndex = nColor miRango.Cells(i, j).Interior.Pattern = xlSolid miRango.Cells(i + 1, j).Interior.ColorIndex = nColor miRango.Cells(i + 1, j).Interior.Pattern = xlSolid End If Next i Next j ' Terminado MsgBox "Ya están marcadas las celdas adyacentes iguales" End Sub