Die dazu erforderlichen Schritte sind sehr langwierig und langwierig.
Angenommen, die Daten in Arbeitsmappe 1 befinden sich in den Sheet1
folgenden Schritten:
- Kopieren Sie die Daten (einschließlich Kopfzeilen) aus der Arbeitsmappe 2
- Einfügen in Zelle
A1
eines leeren Arbeitsblatts in Arbeitsmappe 1 (saySheet2
) - Geben Sie diese Formel in
G1
→ ein=MATCH(B1,Sheet1!B:B,0)
- Kopieren oder einfügen oder füllen Sie die Formel entsprechend aus. Ich bevorzuge diese Tastenfolge:
- Left
- Ctrl+Down
- Right
- Ctrl+ Shift+Up
- Ctrl+D
- Filterung für Spalte aktivieren ( Ctrl+ Shift+ L)
- Filter für
#N/A
nur (Wenn es keine gibt, ignorieren Sie diesen und den nächsten Schritt.) - Löschen Sie alle
#N/A
Zeilen - Löschen Spalten
C
,D
,F
,G
- Markieren Sie die Daten
- Kopieren Sie die Daten ( außer Kopfzeilen) aus
Sheet1
Arbeitsmappe 1 (die aktuelle Arbeitsmappe). - Klicken Sie mit der rechten Maustaste in die Zelle
A2
vonSheet2
und wählen Sie ausInsert Copied Cells
- Stellen Sie sicher
Shift cells down
, dass die Presse ausgewählt istOK
- Wählen Sie alle Daten aus und entfernen Sie die Duplikate über
Data
→Data Tools
→Remove Duplicates
. (Stellen Sie sicher, dass nur die SpalteID
markiert ist.) - Nach Spalte sortieren
ID
Die beste Lösung ist natürlich, diese Schritte zu automatisieren. Dies ist, was der folgende VBA-Code tut.
Kopieren Sie diesen Code in ein Standardmodul in Arbeitsmappe 1:
'============================================================================================ ' Module : a standard module in Workbook 1 ' Version : 0.1.1 ' Part : 1 of 1 ' References : N/A ' Source : https://superuser.com/a/1331855/763880 '============================================================================================ Option Explicit Public Sub CrossCompareSheets() Const s_CompareToWorkbook As String = "Workbook 2.xlsx" Const s_CompareToSheet As String = "Sheet1" Const s_CompareToTopLeft As String = "A1" Const s_CompareToExtraCols As String = "C,D,F" Const s_SourceSheet As String = "Sheet1" Const s_SourceTopLeft As String = "A1" Const n_SourceMatchColumn As Long = 2 Const s_ResultSheet As String = "Sheet2" Const s_ResultTopLeft As String = "A1" Const n_ResultMatchColumn As Long = 2 Const n_ResultUniqueColumn As Long = 1 Const n_ResultSortColumn As Long = 1 Dim wkstCompareTo As Worksheet: Set wkstCompareTo = Workbooks(s_CompareToWorkbook).Worksheets(s_CompareToSheet) Dim rngCompareTo As Range: Set rngCompareTo = wkstCompareTo.Range(s_CompareToTopLeft).CurrentRegion Dim wkstSource As Worksheet: Set wkstSource = ActiveWorkbook.Worksheets(s_SourceSheet) Dim rngSource As Range: Set rngSource = wkstSource.Range(s_SourceTopLeft).CurrentRegion Dim wkstResult As Worksheet: Set wkstResult = ActiveWorkbook.Worksheets(s_ResultSheet) Dim rngResult As Range Dim celResultTopLeft As Range: Set celResultTopLeft = wkstResult.Range(s_ResultTopLeft) wkstResult.UsedRange.Clear rngCompareTo.Copy Destination:=wkstResult.Range(s_ResultTopLeft) Set rngResult = celResultTopLeft.CurrentRegion With rngResult.Resize(ColumnSize:=1).Offset(ColumnOffset:=rngResult.Columns.Count) .FormulaR1C1 = Replace(Replace(Replace( _ "=MATCH(RC,!C,0)" _, "", n_ResultMatchColumn), "", s_SourceSheet), "", n_SourceMatchColumn) .Copy .PasteSpecial xlPasteValues End With Set rngResult = celResultTopLeft.CurrentRegion rngResult.AutoFilter Field:=rngResult.Columns.Count, Criteria1:="#N/A" rngResult.Offset(RowOffset:=1).SpecialCells(xlCellTypeVisible).EntireRow.Delete rngResult.AutoFilter Dim colsToBeDeleted As Range Set colsToBeDeleted = rngResult.Resize(ColumnSize:=1).Offset(ColumnOffset:=rngResult.Columns.Count - 1).EntireColumn Dim varColumn As Variant For Each varColumn In Split(s_CompareToExtraCols, ",") Set colsToBeDeleted = Union(colsToBeDeleted, wkstResult.Range(varColumn & ":" & varColumn)) Next varColumn colsToBeDeleted.Delete Set rngResult = celResultTopLeft.CurrentRegion rngSource.Offset(RowOffset:=1).Copy Destination:=celResultTopLeft.Offset(RowOffset:=rngResult.Rows.Count) Set rngResult = celResultTopLeft.CurrentRegion rngResult.RemoveDuplicates Columns:=n_ResultUniqueColumn, Header:=xlYes Set rngResult = celResultTopLeft.CurrentRegion With wkstResult.Sort .SortFields.Clear .SortFields.Add Key:=rngResult.Columns(n_ResultSortColumn) .SetRange rngResult .Header = xlYes .Apply End With End Sub
Anmerkungen:
Sie können die Konstanten oben ändern, um unterschiedliche Spalten und Dateinamen zu berücksichtigen. Der Code wird automatisch angepasst.