Comparar columnas y si no son iguales insertar celda en blanco

He estado buscando un macro para poder ordenar de esta manera una lista de unos 6 mil registros

Como pueden ver, tengo marcado con color AMARILLO los números de la columna C que no están en A. Y tengo marcado en color AZUL los números de la columna B que SI están en C (en otras palabras no pueden haber parejas coloreadas)

Además el B1809 y B1810 están repetidos, necesito borrar uno de los 2 para que no se repitan

También si pueden observar en la fila 1815 el número que hay en B no existe en C, lo que quiero es que si un número no es igual al de al lado, se añada una celda por encima del número hasta que estén iguales (tomando en cuenta que algunos números de B no están en C y viceversa)

Quedando como resultado esto:

Estuve buscando cómo pero no encuentro una solución que me funcione, me sería de gran ayuda si me facilitaran el macro o qué podría hacer en estos casos

1 Respuesta

Respuesta
2

Te anexo la macro. El resultado quedará en las columnas H e I

Sub Ordenar_Numeros()
'Por.Dante Amor
    Application.ScreenUpdating = False
    j = 0
    ant = ""
    Columns("E:I").Clear
    '
    'Quitar duplicados col B
    u1 = Range("B" & Rows.Count).End(xlUp).Row
    Range("B1:B" & u1).RemoveDuplicates Columns:=1, Header:=xlNo
    'Quitar duplicados col C
    u2 = Range("C" & Rows.Count).End(xlUp).Row
    Range("C1:C" & u2).RemoveDuplicates Columns:=1, Header:=xlNo
    '
    'copiar datos de B
    u1 = Range("B" & Rows.Count).End(xlUp).Row
    Range("B1:B" & u1).Copy Range("E1")
    Range("F1:F" & u1) = "B"
    'copiar datos de C
    u2 = Range("C" & Rows.Count).End(xlUp).Row
    Range("C1:C" & u2).Copy Range("E" & u1 + 1)
    u3 = Range("E" & Rows.Count).End(xlUp).Row
    Range("F" & u1 + 1 & ":F" & u3) = "C"
    '
    'ordenar datos
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("E1:E" & u3), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("F1:F" & u3), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("E1:F" & u3): .Header = xlGuess: .MatchCase = False
        .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    End With
    '
    'Acomodar datos
    For i = 1 To Range("E" & Rows.Count).End(xlUp).Row
        If Cells(i, "F") = "C" Then
            If Cells(i, "E") <> ant Then j = j + 1
            Cells(j, "I") = Cells(i, "E")
        Else
            j = j + 1
            Cells(j, "H") = Cells(i, "E")
        End If
        ant = Cells(i, "E")
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Hola amigo! muchas gracias, funciona, pero se me olvido por completo un detalle, no sé si esto es posible, tengo números con colores azul y rojo aparte del negro, y en el resultado los colores pasan a ser todo negro, no hay alguna posibilidad de hacer que pasen con los mismos colores? perdón pero se me escapó el detalle, valoraré con excelente

por ejemplo B6 está con rojo y los primeros de arriba están azules

Prueba así:

Sub Ordenar_Numeros()
'Por.Dante Amor
    Application.ScreenUpdating = False
    j = 0
    ant = ""
    Columns("E:I").Clear
    '
    'Quitar duplicados col B
    u1 = Range("B" & Rows.Count).End(xlUp).Row
    Range("B1:B" & u1).RemoveDuplicates Columns:=1, Header:=xlNo
    'Quitar duplicados col C
    u2 = Range("C" & Rows.Count).End(xlUp).Row
    Range("C1:C" & u2).RemoveDuplicates Columns:=1, Header:=xlNo
    '
    'copiar datos de B
    u1 = Range("B" & Rows.Count).End(xlUp).Row
    Range("B1:B" & u1).Copy Range("E1")
    Range("F1:F" & u1) = "B"
    'copiar datos de C
    u2 = Range("C" & Rows.Count).End(xlUp).Row
    Range("C1:C" & u2).Copy Range("E" & u1 + 1)
    u3 = Range("E" & Rows.Count).End(xlUp).Row
    Range("F" & u1 + 1 & ":F" & u3) = "C"
    '
    'ordenar datos
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("E1:E" & u3), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("F1:F" & u3), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("E1:F" & u3): .Header = xlGuess: .MatchCase = False
        .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    End With
    '
    'Acomodar datos
    For i = 1 To Range("E" & Rows.Count).End(xlUp).Row
        If Cells(i, "F") = "C" Then
            If Cells(i, "E") <> ant Then j = j + 1
            Cells(i, "E").Copy Cells(j, "I")
        Else
            j = j + 1
            Cells(i, "E").Copy Cells(j, "H")
        End If
        ant = Cells(i, "E")
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

sal u dos

¡Gracias! me ha servido de mucha ayuda, solo que en los duplicados está prevaleciendo el color negro (tiene que prevalecer el rojo o celeste), pero creo que es demasiado pedir y los estoy haciendo manualmente (son muy pocos)

DE NUEVO MUCHAS GRACIAS DANTE!

En los duplicados, elimina el que necesites. En tus comentarios no estableciste cuál de los 2 duplicados se tiene que eliminar.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas