Clasificación de Excel manteniendo valores iguales en diferentes columnas en la misma posición

Clasificación de Excel manteniendo valores iguales en diferentes columnas en la misma posición

Imagina que tengo el siguiente conjunto de datos.

A               B
AnthonyMorgan   EvelynThomas
JoePatterson    RussellRobinson
JohnAnderson    ChristopherMiller
CarolynMorris   RyanStewart
DorisKing       SarahPrice
AlanJohnson     MarilynHall
JonathanHall    EricCooper
AndreaPowell    GregorySimmons
PaulaCooper     JackRussell
AndrewPeterson  SeanEvans
JohnWilliams    JudyBell
LillianLewis    JohnWilliams
SteveRoberts    LillianLewis
MatthewGray     SteveRoberts
ChristinaClark  MatthewGray
                PeterAllen
                SharonHill
                MaryTurner
                DorisGonzales
                VictorWhite
                JoanFoster
                ChristinaClark
                RubyBryant
                RogerColeman
                JosephLong
                AndrewPeterson

Me gustaría ordenar, imaginar por columna, Apara que los mismos valores en diferentes columnas se mantengan juntos. El resultado final sería:

A                   B
AlanJohnson 
AndreaPowell    
AndrewPeterson      AndrewPeterson
AnthonyMorgan   
CarolynMorris   
ChristinaClark      ChristinaClark
                    ChristopherMiller
                    DorisGonzales
DorisKing   
                    EricCooper
                    EvelynThomas
                    GregorySimmons
                    JackRussell
                    JoanFoster
JoePatterson    
JohnAnderson    
JohnWilliams        JohnWilliams
JonathanHall    
                    JosephLong
                    JudyBell
LillianLewis        LillianLewis
                    MarilynHall
                    MaryTurner
MatthewGray         MatthewGray
PaulaCooper 
                    PeterAllen
                    RogerColeman
                    RubyBryant
                    RussellRobinson
                    RyanStewart
                    SarahPrice
                    SeanEvans
                    SharonHill
SteveRoberts        SteveRoberts
                    VictorWhite

¿Alguna idea?

Respuesta1

Pruebe esta macro:

Sub Interleaver()
    Dim nA As Long, nB As Long
    Dim rc As Long, i As Long, j As Long

    rc = Rows.Count
    nA = Cells(rc, "A").End(xlUp).Row
    nB = Cells(rc, "B").End(xlUp).Row
    Range("A1:A" & nA).Copy Range("C1")
    Range("B1:B" & nB).Copy Range("C" & nA + 1)

    For i = 1 To nA + nB
        If i <= nA Then
            Cells(i, "D") = "A"
        Else
            Cells(i, "D") = "B"
        End If
    Next i

    Range("C1:D" & nA + nB).Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlNo, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal

    Range("A1:A" & nA).Clear
    Range("B1:B" & nB).Clear
    j = 2

    If Range("D1").Value = "A" Then
        Cells(1, "A") = Cells(1, "C")
    Else
        Cells(1, "B") = Cells(1, "C")
    End If

    For i = 2 To nA + nB
        If Cells(i, "C") = Cells(i - 1, "C") Then
            j = j - 1
            Range("A" & j & ":B" & j) = Cells(i, "C")
            j = j + 1
        Else
            If Cells(i, "D").Value = "A" Then
                Cells(j, "A") = Cells(i, "C")
            Else
                Cells(j, "B") = Cells(i, "C")
            End If
            j = j + 1
        End If
    Next i
End Sub

Producirá:

ingrese la descripción de la imagen aquí

Respuesta2

No creo que haya una manera sencilla de hacerlo. Intente esto:
- combine sus datos en un rango recordando la ubicación original (por ejemplo, copie su primera columna en una hoja nueva y complete "1" en la siguiente columna, copie la segunda columna debajo de la primera y complete "10" en la segunda columna para este conjunto de datos).
- inserte una tabla dinámica, las etiquetas de las columnas deben ser su primera columna y solicite la suma de la segunda columna (ahora tiene sus valores únicos ordenados alfabéticamente, en la segunda columna 1 o 10 si el nombre apareció solo en una columna o 11 si está presente en ambas ).
- suponiendo que sus datos en la tabla dinámica comienzan en A5, ingrese esto en C5: =if(mod(b5,2)=1,a5,"")y este en d5:=if(b5>9,a5,"")

Respuesta3

Otro flujo de trabajo sería el siguiente. Tenga en cuenta que se realiza manualmente, ya que no conozco ninguna función de Excel que haga lo que está buscando. Otra opción sería utilizar Macro o VBA para automatizar el flujo de trabajo sugerido a continuación.

La imagen 1 muestra datos de ejemplo iniciales:

Inicial

Comience clasificando cada columna por separado. Mantenga que la clasificación no afecte a la otra columna. Luego agregue otra columna para ayudar en el proceso y escriba una función de coincidencia de índice para encontrar coincidencias para cada entrada de la columna A de la columna B:

=INDEX($C$1:$C$10,MATCH(A2,$C$1:$C$10,0),1)

La imagen 2 muestra los resultados de esta etapa:

Indexación

Ahora corte y pegue la columna B para evitar estar adyacente a los valores NA. Son dos celdas más abajo en el ejemplo. Luego corte y pegue la columna A y la columna auxiliar para hacer coincidir las entradas con la columna B. Ver imagen a continuación:

Iteraciones

Iterar esta fase hasta terminar. Recuerde comenzar con la columna B y luego hacer coincidir la columna A y la columna ÍNDICE (columna auxiliar). Finalmente elimine la columna ÍNDICE y listo.

Casi termino

¡HECHO!

Respuesta4

Lo que realmente está pidiendo es una combinación externa completa que trate las dos columnas como tablas separadas.

Hasta donde yo sé, esto no es posible en Excel nativo, incluso con la ayuda del complemento Power Query.

poderlograr los resultadosSIla tabla más larga abarca todas las entradas de la tabla más corta, pero su ejemplo muestra que ese no es el caso.

Lo que puedes hacer es agregar las dos columnas y luego desduplicarlas, eso es bastante fácil. También puede agregar una columna de recuento para poder ver cuántas copias del mismo nombre existían en los datos originales. Déjame saber si quieres hacer eso.

ACTUALIZACIÓN: Como anticipé, puedes hacer esto con Microsoft Access. Para hacerlo, primero necesita tener las dos columnas como tablas separadas. Luego debe crear DOS uniones entre las tablas, una unión exterior izquierda y una unión exterior derecha. Una vez que haya creado esas relaciones, puede realizar una consulta simple para seleccionar la columna única de cada tabla. Eso es todo.

Puede dejar sus datos originales en Excel si lo desea y simplemente vincularlos siempre que divida las dos columnas en tablas separadas.

información relacionada