
Imagine que tenho o seguinte conjunto de dados
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
Gostaria de classificar, imagine por coluna, A
para que os mesmos valores em colunas diferentes sejam mantidos juntos. O resultado final seria:
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
Qualquer ideia?
Responder1
Experimente 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
Irá produzir:
Responder2
Não acho que haja uma maneira simples de fazer isso. Tente isto:
- mescle seus dados em um intervalo lembrando a localização original (por exemplo, copie sua primeira coluna para uma nova planilha e preencha "1" na próxima coluna, copie a segunda coluna abaixo da primeira e preencha "10" na segunda coluna para este conjunto de dados).
- insira uma tabela dinâmica, os rótulos das colunas devem ser sua primeira coluna e solicite a soma da segunda coluna (agora você tem seus valores exclusivos classificados em ordem alfabética, na segunda coluna 1 ou 10 se o nome ocorreu apenas em uma coluna ou 11 se estiver presente em ambas ).
- supondo que seus dados na tabela dinâmica comecem em A5, insira isto em C5: =if(mod(b5,2)=1,a5,"")
e este em d5:=if(b5>9,a5,"")
Responder3
Outro fluxo de trabalho seria o seguinte. Observe que ele é executado manualmente, pois não conheço nenhuma função do Excel que faça o que você procura. Outra opção seria usar Macro ou VBA para automatizar o fluxo de trabalho sugerido abaixo.
A imagem 1 mostra dados de exemplo iniciais:
Comece classificando cada coluna separadamente. Mantenha essa classificação não afeta a outra coluna. Em seguida, adicione outra coluna para auxiliar no processo e escreva uma função de correspondência de índice para encontrar correspondências para cada entrada da coluna A da coluna B:
=INDEX($C$1:$C$10,MATCH(A2,$C$1:$C$10,0),1)
A imagem 2 mostra os resultados desta etapa:
Agora recorte e cole a coluna B para evitar que seja adjacente aos valores NA. Isso está duas células abaixo no exemplo. Depois, recorte e cole a coluna A e a coluna auxiliar para combinar as entradas com a coluna B. Veja a imagem abaixo:
Itere esta fase até terminar. Lembre-se de começar com a coluna B e combinar a coluna A com a coluna INDEX (coluna auxiliar). Por fim, remova a coluna INDEX e pronto.
Responder4
O que você realmente está pedindo é uma junção externa completa, tratando as duas colunas como tabelas separadas.
Pelo que sei, isso não é possível no Excel nativo, mesmo com a ajuda do plugin Power Query.
Vocêpodealcançar os resultadosSEa tabela mais longa abrange todas as entradas da tabela mais curta, mas seu exemplo mostra que não é esse o caso.
O que você pode fazer é anexar as duas colunas e depois desduplicar, o que é bastante fácil. Você também pode adicionar uma coluna de contagem para ver quantas cópias do mesmo nome existiam nos dados originais. Deixe-me saber se você quiser fazer isso.
ATUALIZAÇÃO: Como eu esperava, você pode fazer isso com o Microsoft Access. Para fazer isso, primeiro você precisa ter as duas colunas como tabelas separadas. Você então deve criar DUAS junções entre as tabelas, uma junção externa esquerda e uma junção externa direita. Depois de criar esses relacionamentos, você poderá fazer uma consulta simples para selecionar uma única coluna de cada tabela. É isso.
Você pode deixar seus dados originais no Excel se desejar e simplesmente vinculá-los, desde que divida as duas colunas em tabelas separadas.