Excel: wie Sie übereinstimmende Werte zwischen zwei Spalten ausrichten und die Unterschiede ausgleichen

16760
Beej

Ich habe zwei Datenspalten, die sich überlappen und etwa so aussehen:

------------------------- | Aardvarks | Bears | | Bears | Dogs | | Cats | Giraffes | | Giraffes | Hippos | | Monkeys | Rhinos | | Rhinos | Zebras | ------------------------- 

Gibt es eine Möglichkeit, übereinstimmende Werte zwischen den beiden Spalten auszurichten, während leere Zellen hinzugefügt werden, in denen Unterschiede bestehen, so dass ein Endergebnis wie folgt angezeigt wird:

------------------------- | Aardvarks | | | Bears | Bears | | Cats | | | | Dogs | | Giraffes | Giraffes | | | Hippos | | Monkeys | | | Rhinos | Rhinos | | | Zebras | ------------------------- 

Ich habe gesehen, dass die Leute hier ähnliche Fragen stellen, aber alle sind darauf angewiesen, dass die Spalte Aeine Art "vollständiger" Daten hat und die Spalte B unvollständige Daten, die sortiert werden müssen.

Mein Problem ist, dass beide Spalten doppelte und eindeutige Daten haben (in dem obigen Beispiel enthält die Spalte Anicht alle Tiere).

Gibt es eine Möglichkeit, die Spalten so auszurichten und anzuordnen, dass sie das gewünschte Endergebnis erhalten?

1
Willkommen bei Super User. Was hast du bisher versucht? CharlieRB vor 7 Jahren 0
Können wir davon ausgehen, dass beide Listen die gemeinsamen Wörter in der gleichen Reihenfolge haben? Können wir auch davon ausgehen, dass die Anzahl der benötigten Leerzeilen nicht unbedingt eine ist? fixer1234 vor 7 Jahren 0
Sie könnten dies wahrscheinlich mit Formeln tun, aber die logische Lösung wäre VBA. fixer1234 vor 7 Jahren 0
@ fixer1234, ja zu beiden Fragen. Beej vor 7 Jahren 0
Bitte beachten Sie, dass https://superuser.com kein kostenloser Skript- / Code-Schreibservice ist. Wenn Sie uns sagen, was Sie bisher versucht haben (einschließlich der Skripts / des Codes, die Sie bereits verwenden) und wo Sie stecken bleiben, können wir versuchen, bei bestimmten Problemen zu helfen. Sie sollten auch lesen [Wie kann ich eine gute Frage stellen?] (Https://superuser.com/help/how-to-ask). DavidPostill vor 7 Jahren 0

2 Antworten auf die Frage

2
Beej

Tut mir leid, die Zeit der Leute zu verschwenden, aber nachdem ich die Online-Suche noch mehr durchgeführt hatte, fand ich eine Lösung für mein Problem.

Ich habe diese Seite unten gefunden, die eine VBA-Lösung für das Problem bietet, mit dem ich konfrontiert war. Das Skript funktionierte perfekt für das, was ich erhofft hatte.

http://sites.madrocketscientist.com/jerrybeaucaires-excelassistant/text-functions/line-up-matches

Bitte zitieren Sie die wesentlichen Teile der Antwort aus den Referenzlinks, da die Antwort ungültig werden kann, wenn sich die verlinkten Seiten ändern. DavidPostill vor 7 Jahren 1
0
Ben

Die Website scheint heruntergekommen zu sein ... Zum Glück habe ich letztes Jahr die nützliche VB gespeichert

Option Explicit  Sub LineEmUp() 'Author: Jerry Beaucaire 'Date: 7/5/2010 'Summary: Line up a random number of columns so all matching ' items are on the same rows Dim LC As Long Dim Col As Long Dim LR As Long Application.ScreenUpdating = False  'Spot last column of data LC = Cells(1, Columns.Count).End(xlToLeft).Column  'Add new key column to collect unique values Cells(1, LC + 1) = "Key" For Col = 1 To LC Range(Cells(2, Col), Cells(Rows.Count, Col)).SpecialCells(xlConstants).Copy _ Cells(Rows.Count, LC + 1).End(xlUp).Offset(1) Next Col  Columns(LC + 1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Cells(1, LC + 2), Unique:=True Columns(LC + 2).Sort Key1:=Cells(2, LC + 2), Order1:=xlAscending, Header:=xlYes  'Fill in new table headers w/formatting Range("A1", Cells(1, LC)).Copy Cells(1, LC + 3)  'Fill in new table values LR = Cells(Rows.Count, LC + 2).End(xlUp).Row With Range(Cells(2, LC + 3), Cells(LR, LC + 2 + LC)) .FormulaR1C1 = "=IF(ISNUMBER(MATCH(RC" & LC + 2 & ",C[-" & LC + 2 _ & "],0)), RC" & LC + 2 & ", """")" .Value = .Value End With  'Cleanup/Erase old values Range("A1", Cells(1, LC + 2)).EntireColumn.Delete xlShiftToLeft Columns.Autofit Application.ScreenUpdating = True End Sub