
Stellen Sie sich vor, ich habe den folgenden Datensatz
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
Ich möchte sortieren, stelle ich mir nach Spalten vor, A
sodass gleiche Werte in verschiedenen Spalten zusammengehalten werden. Das Endergebnis wäre:
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
Irgendeine Idee?
Antwort1
Versuchen Sie dieses Makro:
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
Es wird produziert:
Antwort2
Ich glaube nicht, dass es dafür einen einfachen Weg gibt. Versuchen Sie Folgendes:
- Fügen Sie Ihre Daten in einem Bereich zusammen und merken Sie sich dabei den ursprünglichen Speicherort (kopieren Sie z. B. Ihre erste Spalte in ein neues Blatt und füllen Sie die nächste Spalte mit „1“ aus, kopieren Sie die zweite Spalte unter der ersten und füllen Sie die zweite Spalte für diesen Datensatz mit „10“ aus).
- Fügen Sie eine Pivot-Tabelle ein, die Spaltenbeschriftungen sollten Ihre erste Spalte sein, und fragen Sie nach der Summe der zweiten Spalte (jetzt haben Sie Ihre eindeutigen Werte alphabetisch sortiert, in der zweiten Spalte 1 oder 10, wenn der Name nur in einer Spalte vorkommt, oder 11, wenn er in beiden vorkommt).
- Angenommen, Ihre Daten in der Pivot-Tabelle beginnen in A5, geben Sie dies in C5 ein: =if(mod(b5,2)=1,a5,"")
und dies in d5:=if(b5>9,a5,"")
Antwort3
Ein anderer Workflow wäre wie folgt. Beachten Sie, dass er manuell ausgeführt wird, da mir keine Excel-Funktion bekannt ist, die das tut, wonach Sie suchen. Eine andere Möglichkeit wäre, Makro oder VBA zu verwenden, um den unten vorgeschlagenen Workflow zu automatisieren.
Bild 1 zeigt erste Beispieldaten:
Beginnen Sie damit, jede Spalte separat zu sortieren. Achten Sie darauf, dass die Sortierung die anderen Spalten nicht beeinflusst. Fügen Sie dann eine weitere Spalte hinzu, um den Vorgang zu unterstützen, und schreiben Sie eine Index-Match-Funktion, um Übereinstimmungen für jeden Eintrag in Spalte A aus Spalte B zu finden:
=INDEX($C$1:$C$10,MATCH(A2,$C$1:$C$10,0),1)
Bild 2 zeigt die Ergebnisse dieser Phase:
Schneiden Sie nun die Spalte B aus und fügen Sie sie ein, damit sie nicht neben NA-Werten steht. Im Beispiel sind das zwei Zellen weiter unten. Schneiden Sie anschließend die Spalte A und die Hilfsspalte aus und fügen Sie sie ein, um Einträge mit der Spalte B abzugleichen. Siehe Abbildung unten:
Wiederholen Sie diese Phase, bis sie abgeschlossen ist. Denken Sie daran, mit Spalte B zu beginnen und dann Spalte A und die Indexspalte (Hilfsspalte) abzugleichen. Entfernen Sie abschließend die Indexspalte, und Sie sind fertig.
Antwort4
Was Sie wirklich verlangen, ist ein vollständiger äußerer Join, der die beiden Spalten als separate Tabellen behandelt.
Soweit mir bekannt ist, ist dies im nativen Excel auch mit Hilfe des Power Query-Plugins nicht möglich.
Dudürfendie Ergebnisse erzielenWENNdie längere Tabelle umfasst alle Einträge der kürzeren Tabelle, aber Ihr Beispiel zeigt, dass dies nicht der Fall ist.
Was Sie tun können, ist, die beiden Spalten anzuhängen und dann zu deduplizieren. Das ist ganz einfach. Sie können auch eine Zählspalte hinzufügen, damit Sie sehen können, wie viele Kopien desselben Namens in den Originaldaten vorhanden waren. Lassen Sie mich wissen, ob Sie das tun möchten.
UPDATE: Wie ich erwartet habe, können Sie dies mit Microsoft Access tun. Dazu müssen Sie zunächst die beiden Spalten als separate Tabellen haben. Dann müssen Sie ZWEI Verknüpfungen zwischen den Tabellen erstellen, eine linke äußere Verknüpfung und eine rechte äußere Verknüpfung. Sobald Sie diese Beziehungen erstellt haben, können Sie eine einfache Abfrage ausführen, um die einzelne Spalte aus jeder Tabelle auszuwählen. Das ist alles.
Sie können Ihre Originaldaten bei Bedarf in Excel belassen und einfach eine Verknüpfung dazu herstellen, solange Sie die beiden Spalten in separate Tabellen aufteilen.