VBA vergleichen Tabelle
Hallo Leute,
ich möchte folgendes erreichen:
Es gibt 2 Tabellen, in der einen Tabelle wird nach der Reihe der Wert aus Spalte "A" mit den Werten aus der Tabelle aus der Spalte "B" verglichen. Die Werte in der 2 Tabelle sind nicht gleich angeordnet wie die in der ersten. Wenn der Wert aus A gefunden wurde soll ein Wert der in der 1. Tabelle in Spalte C steht, in die 2. Tabelle in die Spalte G kopiert/eingefügt werden.
Wäre sowas möglich?! Hab mir schon die Zähe daran ausgebissen.
Hier mein Anfang, der einige Fehler enthält. Es ist auch vielleicht ein komplett falscher Ansatz.
Code:
Sub x()
Dim Zelle As Range
Dim sBeg As String
Dim selc
Dim i As Integer
Do Until i = 50
i = i + 1
sBeg = Tabelle3.Range("A" & i)
selc = Tabelle2.Range("B2:B65536")
selc.Select
If Zelle = sBeg And Tabelle3.Range("E" & i) <> "D" Then
Zelle.Select
Selection.Copy
Sheets("Zusammenfasssung").Select
Range("G" & i).Select
ActiveSheet.Paste
End If
Loop
End Sub
ich möchte folgendes erreichen:
Es gibt 2 Tabellen, in der einen Tabelle wird nach der Reihe der Wert aus Spalte "A" mit den Werten aus der Tabelle aus der Spalte "B" verglichen. Die Werte in der 2 Tabelle sind nicht gleich angeordnet wie die in der ersten. Wenn der Wert aus A gefunden wurde soll ein Wert der in der 1. Tabelle in Spalte C steht, in die 2. Tabelle in die Spalte G kopiert/eingefügt werden.
Wäre sowas möglich?! Hab mir schon die Zähe daran ausgebissen.
Hier mein Anfang, der einige Fehler enthält. Es ist auch vielleicht ein komplett falscher Ansatz.
Code:
Sub x()
Dim Zelle As Range
Dim sBeg As String
Dim selc
Dim i As Integer
Do Until i = 50
i = i + 1
sBeg = Tabelle3.Range("A" & i)
selc = Tabelle2.Range("B2:B65536")
selc.Select
If Zelle = sBeg And Tabelle3.Range("E" & i) <> "D" Then
Zelle.Select
Selection.Copy
Sheets("Zusammenfasssung").Select
Range("G" & i).Select
ActiveSheet.Paste
End If
Loop
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 109665
Url: https://administrator.de/forum/vba-vergleichen-tabelle-109665.html
Ausgedruckt am: 02.05.2025 um 23:05 Uhr
13 Kommentare
Neuester Kommentar
Hallo Saiks1989 und willkommen im Forum!
Ist das so gemeint, dass, wenn der Wert aus zB A2 auch in der Spalte B zumindest einmal vorkommt, der Wert aus C2 in die Spalte G der zweiten Tabelle eingefügt werden soll?
Dann etwa so:
Grüße
bastla
P.S.: Für die Formatierung von Code siehe ...
Ist das so gemeint, dass, wenn der Wert aus zB A2 auch in der Spalte B zumindest einmal vorkommt, der Wert aus C2 in die Spalte G der zweiten Tabelle eingefügt werden soll?
Dann etwa so:
Sub Zusammenfassen()
Quelltabelle = "Tabelle1"
Quellspalte = "C"
Quellzeile = 2 'Quelldaten ab dieser Zeile
Kriterienspalte = "A"
Set Suchbereich = Worksheets(Quelltabelle).Range("B:B")
Zieltabelle = "Tabelle2"
Zielspalte = "G"
Zielzeile = 2 'Eintragung ab dieser Zeile
With Worksheets(Quelltabelle)
Kriterium = .Cells(Quellzeile, Kriterienspalte)
Do While Kriterium <> ""
If Not Suchbereich.Find(Kriterium, LookIn:=xlValues) Is Nothing Then
Worksheets(Zieltabelle).Cells(Zielzeile, Zielspalte).Value = .Cells(Quellzeile, Quellspalte).Value
Zielzeile = Zielzeile + 1
End If
Quellzeile = Quellzeile + 1
Kriterium = .Cells(Quellzeile, Kriterienspalte)
Loop
End With
End Sub
bastla
P.S.: Für die Formatierung von Code siehe ...
Hallo Saiks1989!
Wenn der Wert in der selben Zeile neben den Suchbereich (Tabelle2, Spalte B) stehen soll, dann verwende doch einfach die folgende Formel und kopiere diese nach unten:
Falls das Ganze allerdings anders gemeint war, dann stelle bitte die Inhalte der relevanten Spalten aus den beiden Tabellen einmal etwas genauer dar ...
Grüße
bastla
Wenn der Wert in der selben Zeile neben den Suchbereich (Tabelle2, Spalte B) stehen soll, dann verwende doch einfach die folgende Formel und kopiere diese nach unten:
=WENN(ISTFEHLER(SVERWEIS(B2;Tabelle1!$A$1:$C$50;3;0));"";SVERWEIS(B2;Tabelle1!$A$1:$C$50;3;0))
Grüße
bastla
Hallo Saiks1989!
Na dann eben folgende Variation der Schleifenteiles:
Grüße
bastla
Na dann eben folgende Variation der Schleifenteiles:
With Worksheets(Quelltabelle)
Kriterium = .Cells(Quellzeile, Kriterienspalte)
Do While Kriterium <> ""
Set F = Suchbereich.Find(Kriterium, LookIn:=xlValues)
If Not F Is Nothing Then
Zeile = F.Row
'
' weitere Befehle
'
End If
Quellzeile = Quellzeile + 1
Kriterium = .Cells(Quellzeile, Kriterienspalte)
Loop
End With
bastla
Hallo Saiks1989!
Und für welche Zeile wird der Fehler angezeigt (wo landest Du, wenn Du "Debuggen" wählst)?
Um zumindest die Hälfte der Meldung ausschließen zu können, kannst Du die "With"- und "End With"-Zeile aus Deinem Coden entfernen - Du verwendest deren Funktionalität ohnehin nicht.
Ansonsten nochmals der Hinweis darauf, dass der Rückgabewert für das Suchergebnis (das Objekt F bzw G) auch Nothing sein kann und dies vor dem Versuch, mit F.Row bzw G.Row die Zeile der Fundstelle zu erhalten, geprüft werden sollte.
Grüße
bastla
Und für welche Zeile wird der Fehler angezeigt (wo landest Du, wenn Du "Debuggen" wählst)?
Um zumindest die Hälfte der Meldung ausschließen zu können, kannst Du die "With"- und "End With"-Zeile aus Deinem Coden entfernen - Du verwendest deren Funktionalität ohnehin nicht.
Ansonsten nochmals der Hinweis darauf, dass der Rückgabewert für das Suchergebnis (das Objekt F bzw G) auch Nothing sein kann und dies vor dem Versuch, mit F.Row bzw G.Row die Zeile der Fundstelle zu erhalten, geprüft werden sollte.
Grüße
bastla