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

Forumthread: Wert in anderen Tabellenblatt suchen mittels vba

Wert in anderen Tabellenblatt suchen mittels vba
11.07.2018 10:10:55
Anni1987
Hallo,
ich habe folgendes Problem:
Ich habe eine Exceltabelle mit zwei Tabellenblättern.
Im ersten Blatt stehen Werte (10 Stellige Zahl) in Spalte B (5.500 Zeilen). Ich will nun überprüfen, ob diese Werte im zweiten Blatt in Spalte B stehen (9 Zeilen), und wenn ja, dass mir der Wert aus Spalte A der 2. Tabelle in der ersten Tabelle Spalte D wiedergegeben wird. Die gleiche Überprüfung erfolgt noch einmal mit Spalte A des zweiten Blattes, wobei dann der Wert aus Spalte B wiedergegeben werden soll.
Ich habe es bereits mit wie folgt probiert, es funktioniert auch, aber dabei rechnet excel sich tod:
for c = 2 to letzteZeilerelevant1
Sheets("relevant").Range("D" &c).formulaR1C1 = Iferror(Index(Mittelgeberbestand!R1:R1048576, Matsch (RC[-2, Mittelgeberbestand!C2,0),1), If error(Index(Mittelgeberbestand!R1:R1045876,Match(Rc[-2], Match(RC[-2],Mittelgeberbestand!C1,0),2),""""))"
Next c
Ich arbeite mit Excel 2016.
Gibt es eine schnellere Möglichkeit?
Vielen Dank
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert in anderen Tabellenblatt suchen mittels vba
11.07.2018 13:18:31
MCO
Hallo Anni!
Das sollte für den ersten Teil klappen, den zweiten Teil musst du dann dementsprechend mit den Suchbereichen anpassen
Gruß, MCO
Sub Tab_suche()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim rng1 As Range, rng2 As Range
Dim rng2_n_arr, rng2_w_arr As Variant
Set sh1 = Sheets(1)
Set sh2 = Sheets(2)
Set rng1 = sh1.Range("B:B").SpecialCells(xlCellTypeConstants) 'zu suchende Nummern
Set rng2 = sh2.Range("B:B").SpecialCells(xlCellTypeConstants) 'findebereich
For Each num2 In rng2 'Werte in Datenobjekt schreiben
rng2_num = rng2_num & num2 & ","
rng2_Wert = rng2_Wert & num2.Offset(0, -1) & ","
Next
rng2_n_arr = Split(rng2_num, ",")
rng2_w_arr = Split(rng2_Wert, ",")
For Each num In rng1 'Suchbereich durchlaufen
For i = 0 To UBound(rng2_n_arr) - 1
If CStr(num) = rng2_n_arr(i) Then num.Offset(0, 2) = rng2_w_arr(i) 'Eintrag bei Ü _
bereinstimmung
Next i
Next num
End Sub

Anzeige
AW: Wert in anderen Tabellenblatt suchen mittels vba
12.07.2018 12:21:51
Anni1987
Hallo MCO,
vielen Dank! für die schnelle Rückmeldung.
Leider meckert er noch das die Variablen
Num2, rng_num2, rng2_Wert nicht definiert sind.
Soll ich die auch als Variant definieren?
Hab ich jetzt zumindest erstmal so eingegben, um zu schauen ob es läuft, aber es taucht ein weiterer Fehler auf : Sub oder Function nicht definiert und markiert das erste Splitt. Was muss ich hier noch tun.
Magst du mir vielleicht auch kurz beschreiben was der code genau macht? So weit sind meine vba Kenntnisse leider nicht, dass ich ihn vollständig verstehe.
Anzeige
nur dieser Hinweis
14.07.2018 10:52:14
Oberschlumpf
Hi Anni,
hast du "Splitt" nur in deiner Antwort so geschrieben, oder auch im Code?
Im Code MUSS es "Split" heißen.
Hilfts?
Ciao
Thorsten
;

Forumthreads zu verwandten Themen

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

Werte in anderen Tabellenblättern mit VBA suchen


Schritt-für-Schritt-Anleitung

Um Werte in anderen Tabellenblättern mit VBA zu suchen, kannst Du den folgenden Code verwenden. Dieser Code vergleicht Werte in einer bestimmten Spalte (z.B. Spalte B) des ersten Blattes mit Werten im zweiten Blatt und gibt die entsprechenden Werte in einer anderen Spalte zurück.

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".
  3. Kopiere den Code: Füge den folgenden VBA-Code in das Modul ein.
Sub Tab_suche()
    Dim sh1 As Worksheet, sh2 As Worksheet
    Dim rng1 As Range, rng2 As Range
    Dim rng2_n_arr, rng2_w_arr As Variant
    Dim num2 As Variant, rng2_num As String, rng2_Wert As String
    Set sh1 = Sheets(1)
    Set sh2 = Sheets(2)
    Set rng1 = sh1.Range("B:B").SpecialCells(xlCellTypeConstants) 'zu suchende Nummern
    Set rng2 = sh2.Range("B:B").SpecialCells(xlCellTypeConstants) 'findebereich

    For Each num2 In rng2 'Werte in Datenobjekt schreiben
        rng2_num = rng2_num & num2 & ","
        rng2_Wert = rng2_Wert & num2.Offset(0, -1) & ","
    Next

    rng2_n_arr = Split(rng2_num, ",")
    rng2_w_arr = Split(rng2_Wert, ",")

    For Each num In rng1 'Suchbereich durchlaufen
        For i = 0 To UBound(rng2_n_arr) - 1
            If CStr(num) = rng2_n_arr(i) Then num.Offset(0, 2) = rng2_w_arr(i) 'Eintrag bei Übereinstimmung
        Next i
    Next num
End Sub
  1. Führe den Code aus: Drücke F5 oder wähle "Run" > "Run Sub/UserForm".

Häufige Fehler und Lösungen

  • Fehler: Sub oder Function nicht definiert
    Stelle sicher, dass der Befehl Split korrekt geschrieben ist. Es muss Split und nicht Splitt heißen.

  • Fehler: Variablen nicht definiert
    Du musst sicherstellen, dass alle Variablen, wie num2, rng2_num und rng2_Wert, als Variant definiert sind.

  • Excel läuft langsam
    Wenn Excel zu langsam ist, kann dies an der Anzahl der Zeilen liegen. Überlege, die Daten in einem kleineren Bereich zu speichern oder die Berechnungsoptionen in Excel auf "manuell" zu setzen.


Alternative Methoden

Wenn Du keine VBA-Lösungen verwenden möchtest, kannst Du auch die Funktionen VLOOKUP oder INDEX und MATCH in Excel verwenden, um ähnliche Ergebnisse zu erzielen:

=IFERROR(VLOOKUP(B2, 'Tabelle2'!B:A, 2, FALSE), "")

Diese Formel sucht in der zweiten Tabelle nach dem Wert aus B2 und gibt den entsprechenden Wert aus Spalte A zurück.


Praktische Beispiele

Stellen wir uns vor, Du hast folgende Werte:

Tabelle 1 (Daten)

A B C D
1234567890
0987654321

Tabelle 2 (Referenz)

A B
Wert1 1234567890
Wert2 0987654321

Nach Ausführung des VBA-Codes wird die Tabelle 1 wie folgt aussehen:

A B C D
1234567890 Wert1
0987654321 Wert2

Tipps für Profis

  • Optimierung des Codes: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Performance beim Ausführen von VBA zu verbessern.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutine, um unerwartete Fehler während der Ausführung zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Spalten zu durchsuchen?
Du kannst einfach weitere Schleifen hinzufügen, die den Code für die anderen Spalten wiederholen.

2. Was mache ich, wenn ich nicht mit VBA arbeiten möchte?
Nutze die oben genannten Excel-Funktionen wie VLOOKUP, INDEX oder MATCH, um ähnliche Ergebnisse ohne VBA zu erzielen.

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