Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: For Schleife / Suche in 2 Tabellen

For Schleife / Suche in 2 Tabellen
16.06.2023 10:26:10
sndrjng

Hallo! Ich bin komplett neu hier und versuche mich gerade VBA zu lernen.
Ich benötige allerdings eure Hilfe.

Ich habe ein Excel Arbeitsblatt mit zwei Tabellen. Nun benötige ich eine Schleife, welche nach übereinstimmenden Worten in beiden Tabellen sucht. Sobald ein Wort gefunden wurde, was in beiden Tabellen vorkommt, soll eine neue Tabelle mit 4 neuen Spalten generiert werden. Ich versuche es mal zu veranschaulichen:

Tabelle1:
- hat zwei Spalten
- in Spalte 1 stehen die Worte die verglichen werden sollen
- ist maximal 5 Zeilen lang

Tabelle2:
- auch zwei Spalten
- in Spalte 1 stehen ebenfalls die Worte die vergleichen werden sollen
- in Spalte zwei steht Text, welcher als Tabellenüberschrift gezogen werden soll

So richtig finde ich mich nicht rein - vielleicht kann mir ja hier jemand helfen!
DANKE! :)

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Schleife / Suche in 2 Tabellen
16.06.2023 11:10:43
Yal
Hallo Sndr (man spricht sich im Forum per Vorname an ;-)

Wenn Du VBA lernen möchtest, sei willkommen.

Nun, bei dem Vergleich zwischen 2 Tabellen (auch "intelligente" Tabelle benannt, also durch "Einfügen", "Tabelle" erzeugt) ist am besten Power Query anzuwenden: beide Tabelle in PQ anbinden, join, als neue Tabelle herausgeben.
Siehe https://excelhero.de/power-query/power-query-ganz-einfach-erklaert

VBA mit ListObjects, wie aktive Tabelle in VBA heissen, ist nicht ganz der einfachste Einstieg, aber machbar ist es trotzdem.
Folgende Code habe ich nicht getestet, weil ich keine Datei nachbaue (trifft nie das Original), sollte aber Pi-mal-Daumen passen:

Sub Vergleich()
Dim t1 As ListObject
Dim t2 As ListObject
Dim t3 As ListObject
Dim R1 As ListRow
Dim R2 As ListRow

    Set t1 = Range("Tabelle1").Parent.ListObjects("Tabelle1") 'auf Name der Tabelle anpassen
    Set t2 = Range("Tabelle2").Parent.ListObjects("Tabelle2") 'auf Name der Tabelle anpassen
    Set t3 = Range("Tabelle3").Parent.ListObjects("Tabelle3") 'auf Name der Tabelle anpassen
'Ziel-Tabelle vorher leeren, falls erwünscht
    t3.DataBodyRange.Delete
'prüfen und übertragen
    For Each R1 In t1.ListRows
        For Each R2 In t2.ListRows
            If R1.Range.Cells(1).Value = R2.Range.Cells(1).Value Then 'Da R1 und R2 je eine Einzelzeile sind, ist der Index gleich Spalte der jeweilige Tabelle, also in beide die erste Spalte. 
                With t3.ListRows.Add
                    .Range.Cells(1) = R1.Range.Cells(1)
                    .Range.Cells(2) = R1.Range.Cells(2)
                    .Range.Cells(3) = R2.Range.Cells(1)
                    .Range.Cells(4) = R2.Range.Cells(2)
                End If
            End If
        Next
    Next
End Sub
VG
Yal

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

For Schleife in Excel: Suche in 2 Tabellen mit VBA


Schritt-für-Schritt-Anleitung

Um eine For Schleife in VBA zu implementieren, die nach übereinstimmenden Worten in zwei Tabellen sucht und eine neue Tabelle mit den entsprechenden Daten erstellt, folge diesen Schritten:

  1. Öffne Excel und gehe zum VBA-Editor, indem Du ALT + F11 drückst.

  2. Füge ein neues Modul hinzu: Klicke im Projekt-Explorer mit der rechten Maustaste auf dein Projekt, wähle Einfügen und dann Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Vergleich()
        Dim t1 As ListObject
        Dim t2 As ListObject
        Dim t3 As ListObject
        Dim R1 As ListRow
        Dim R2 As ListRow
    
        Set t1 = Range("Tabelle1").Parent.ListObjects("Tabelle1") ' auf Name der Tabelle anpassen
        Set t2 = Range("Tabelle2").Parent.ListObjects("Tabelle2") ' auf Name der Tabelle anpassen
        Set t3 = Range("Tabelle3").Parent.ListObjects("Tabelle3") ' auf Name der Tabelle anpassen
    
        ' Ziel-Tabelle vorher leeren, falls erwünscht
        t3.DataBodyRange.Delete
    
        ' prüfen und übertragen
        For Each R1 In t1.ListRows
            For Each R2 In t2.ListRows
                If R1.Range.Cells(1).Value = R2.Range.Cells(1).Value Then
                    With t3.ListRows.Add
                        .Range.Cells(1) = R1.Range.Cells(1)
                        .Range.Cells(2) = R1.Range.Cells(2)
                        .Range.Cells(3) = R2.Range.Cells(1)
                        .Range.Cells(4) = R2.Range.Cells(2)
                    End With
                End If
            Next
        Next
    End Sub
  4. Passe die Tabellennamen an, falls deine Tabellen anders heißen.

  5. Führe das Makro aus: Gehe zurück zu Excel, drücke ALT + F8, wähle Vergleich aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehlermeldung: „Objekt nicht gefunden“: Stelle sicher, dass die Tabellen korrekt benannt sind und die entsprechenden Bereiche definiert wurden.
  • Leere Ziel-Tabelle: Überprüfe, ob die Ziel-Tabelle (Tabelle3) existiert und nicht ausgeblendet ist.
  • Keine Übereinstimmungen gefunden: Vergewissere Dich, dass die gesuchten Worte genau übereinstimmen (Groß-/Kleinschreibung beachten).

Alternative Methoden

Wenn Du mit VBA nicht vertraut bist, kannst Du auch Power Query verwenden, um die gleichen Daten zu verarbeiten:

  1. Daten in Power Query importieren: Gehe zu Daten > Abfragen und Verbindungen > Abfrage erstellen.
  2. Beide Tabellen laden und einen Join der Tabellen durchführen.
  3. Die Ergebnisse als neue Tabelle ausgeben.

Weitere Informationen findest Du hier.


Praktische Beispiele

Angenommen, Du hast folgende Daten:

Tabelle1 Worte Beschreibung
Apfel Frucht
Banane Frucht
Tabelle2 Worte Kategorie
Apfel Obst
Kiwi Obst

Nach Ausführung des VBA-Codes wird Tabelle3 wie folgt aussehen:

Worte Beschreibung Worte Kategorie
Apfel Frucht Apfel Obst

Tipps für Profis

  • Verwende Fehlerbehandlung im VBA-Code, um mögliche Laufzeitfehler besser zu handhaben.
  • Optimierung der Schleifen: Wenn Du mit größeren Datenmengen arbeitest, prüfe, ob Du die Schleifen effizient gestalten kannst, z.B. durch Verwendung von Dictionaries.
  • Dokumentation: Kommentiere Deinen Code gut, damit Du und andere ihn leichter verstehen.

FAQ: Häufige Fragen

1. Muss ich VBA aktivieren?
Ja, Du musst sicherstellen, dass Makros in Excel aktiviert sind, um das VBA-Skript ausführen zu können.

2. Kann ich die Tabellen formatieren?
Ja, Du kannst die Formatierung der Zellen in Tabelle3 nach dem Erstellen anpassen, entweder manuell oder durch zusätzlichen VBA-Code.

3. Funktioniert der Code in Excel Online?
VBA funktioniert nur in Desktopversionen von Excel, nicht in Excel Online oder Mac-Versionen, die keine VBA-Unterstützung bieten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige