
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, A
para 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á:
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:
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:
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:
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.
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.
Tú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.