Excel VBA - Suche nach mehreren Werten in zwei Excel-Tabellen

2439
DimiTop

Ich habe zwei Excel-Tabellen und muss die Werte von einem zum anderen kopieren.

Blatt 1: Enthält IDs in einer Spalte und Daten in einer anderen, die ich später in Blatt 2 haben möchte.

Blatt 2: Enthält die gleichen IDs und muss mit den entsprechenden Datenwerten aus Blatt 1 erweitert werden.

Wie suche ich nach den passenden IDs und kopiere dann den zugehörigen Datenwert von einem Excel-Blatt in das andere?

-1
Das klingt nach einem einfachen Job für [VLOOKUP ()] (https://exceljet.net/excel-functions/excel-vlookup- function). Bandersnatch vor 6 Jahren 0

3 Antworten auf die Frage

0
v8-E

Sie können =exact()oder verwenden

Zwei Blätter in derselben Arbeitsmappe vergleichen :

  1. Aktivieren Sie die Arbeitsmappe, in der Sie zwei Arbeitsblätter vergleichen möchten, und klicken Sie auf

Ansicht> Neues Fenster

. 2. Wechseln Sie dann zur Taskleiste, um das neue Fenster der aktuellen Arbeitsmappe anzuzeigen

  1. Gehen Sie zu den beiden Blättern, die Sie aus jedem Fenster vergleichen möchten, und ordnen Sie sie nebeneinander an

  2. Vergleichen Sie nun zwei Blätter nach Bedarf.

Um den Unterschied herauszufinden

  1. Öffnen Sie die Arbeitsmappe mit den Blättern, die Sie vergleichen möchten, und erstellen Sie ein neues Blatt.

  2. Wählen Sie in dem neuen Blatt eine leere Zelle aus, beispielsweise A1, und geben Sie diese Formel ein

=IF(Sheet1!A1<> Sheet7!A1, "Sheet1:"&Sheet1!A1&" vs Sheet7:"&Sheet7!A1, "") 

Blatt1 und Blatt7 sind die Blätter, mit denen Sie vergleichen möchten, und A1 ist die erste Zelle, die Sie vergleichen möchten.

  1. Ziehen Sie dann den Griff für die automatische Füllung über den Bereich, den Sie zwischen zwei Blättern vergleichen müssen.

Vergleichen Sie zwei Arbeitsblätter in zwei verschiedenen Arbeitsmappen

Wenn die beiden Arbeitsblätter, die Sie in zwei verschiedenen Arbeitsmappen vergleichen möchten, verwendet werden können, können Sie das Hilfsprogramm "Nebeneinander anzeigen" anwenden.

  1. Öffnen Sie die beiden Blätter, die Sie mit, und vergleichen möchten
activate one sheet and click View > View Side by Side. 
  1. Dann wurden die beiden Arbeitsblätter in zwei Arbeitsmappen horizontal angezeigt. Anschließend können Sie zwei Arbeitsblätter bei Bedarf vergleichen.
Danke dir bis jetzt. Ich möchte Werte vergleichen und automatisch einen Wert kopieren. Also hilft mir das Ansehen nicht. DimiTop vor 6 Jahren 0
0
paul bica

@Bandersnatch ist die einfachste Lösung

Für diese Daten auf Blatt 1:

Anfangsdaten

.

Die Formel für Sheet2, Spalte B wäre =VLOOKUP(A2, Sheet1!A$1:B$6, 2)

VLookUp-Ergebnis


In VBA:


Option Explicit  Public Sub FindValsInWS1Vlookup()  With Sheet2.Range("B2")  .FormulaR1C1 = "=VLOOKUP(RC[-1], Sheet1!R1C[-1]:R6C, 2)"  .AutoFill Destination:=Range("B2:B6")  End With  End Sub 

Eine weitere Option (nur VBA mit Wörterbuchobjekt) - Auf Blatt 3:


Option Explicit  'Add ref in VBA window: Tools -> References... -> Microsoft Scripting Runtime  Public Sub FindValsInWS1Arrays()  Dim arr1 As Variant, arr21 As Variant, arr22 As Variant Dim i As Long, j As Long, d As Dictionary  arr1 = Sheet1.UsedRange arr21 = Sheet3.UsedRange.Columns(1) arr22 = Sheet3.UsedRange.Columns(2) Set d = New Dictionary  For i = LBound(arr1) To UBound(arr1) d(arr1(i, 1)) = arr1(i, 2) 'read the 2 columns from ws1 into a dictionary Next  For i = LBound(arr21) To UBound(arr21) If d.Exists(arr21(i, 1)) Then arr22(i, 1) = d(arr21(i, 1)) Next  Sheet3.UsedRange.Columns(2) = arr22  End Sub 

Ergebnis:

Nur VBA

Hinweis: IDs können für diese Lösungen nicht doppelt vorhanden sein

-1
Rajesh S

Ich möchte Ihnen zwei Methoden vorschlagen. Der erste ist Non-VBA-Lösung und der andere ist VBA.

Methode 1:

Verwenden Sie diese Array-Formel in Zelle A2 von Blatt 2.

{=IFERROR(INDEX(Sheet1!$A$2:$E$6, SMALL(IF(COUNTIF($G$1, Sheet1!$A$2:$A$6), ROW(Sheet1!$A$2:$E$6)-MIN(ROW(Sheet1!$A$2:$E$6))+1), ROW(A1)), COLUMN(A1)),"")} 

Hinweis: Ziehen Sie diese Formel nach rechts in die Spalte E und dann nach unten. Zelle G1 in Blatt 2 hat Übereinstimmungscode Q1.

Methode 2:

Sub ExtractDuplicateID()   Dim sht As Worksheet  Dim newsht As Worksheet    Set sht = ThisWorkbook.Worksheets("Sheet1") Set newsht = ThisWorkbook.Worksheets("Sheet2")   Set dat = sht.Range("A1") Set newdat = newsht.Range("A1")   Dim i, j i = 1 j = 1   'Copy Header Values from Sheet1  newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value  newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value  newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value  newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value  newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value   Do While newdat.Offset(i, 0).Value <> "" Or newdat.Offset(i, 1).Value <> ""  j = 1   Do While dat.Offset(j, 0).Value <> ""  If (newdat.Offset(i, 0).Value = dat.Offset(j, 4).Value _ Or newdat.Offset(i, 1).Value = dat.Offset(j, 5).Value) _ And dat.Offset(j, 6).Value = "Q1" Then  'Copy Header Values in Sheet2  newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value  newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value  newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value  newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value  newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value   iRow = iRow + 1 End If j = j + 1  Loop  i = i + 1  Loop End Sub 

Hoffe das hilft dir.

Es wäre mir eine Freude, den GRUND zu lernen. Diese Antwort ist Down Voted !! Rajesh S vor 6 Jahren 0