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

Forumthread: Find Funktion in VBA

Find Funktion in VBA
kiki
Hallo zusammen,
ich habe eine Frage zur Find Funktion in einer ziemlich großen Datei. Ich habe zwei Tabellenblätter. In Tabelle2 habe ich in Saplte A eine Liste mit ca. 20000 numerischen Einträgen. In Spalte B,C,D sind zu einigen dieser Einträge entsprechende Werte zugehörig. Die Werte aus Spalte A möchte ich nun einzeln durchgehen und jeden in Tabelle1, Spalte A suchen. Wenn es den Wert gibt, sollen die zugehörigen Werte aus Spalte B,C,D auch in Tabelle1 hinzugefügt werden.
In der Beispielmappe habe ich mit der Find Funktion versucht ie Aufgabe zu lösen, aber natürlich klappt es nicht:-)
https://www.herber.de/bbs/user/75369.xls
Ich weiß, der Code ist ziemlich dilettantisch, aber irgendwie muss man ja anfangen.
Ich bin für jede Hilfe sehr dankbar,
Viele Grüße,
kikimat
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Find Funktion in VBA
20.06.2011 13:29:40
Rudi
Hallo,
Sub Kopieren()
Dim m As Integer
Dim wsBasis As Worksheet
Dim wsAktuell As Worksheet
Dim rngC As Range, rngF As Range
Set wsAktuell = ThisWorkbook.Worksheets("Tabelle1")
Set wsBasis = ThisWorkbook.Worksheets("Tabelle2")
Application.ScreenUpdating = False
With wsAktuell
For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
Set rngF = wsBasis.Columns(1).Find(rngC, lookat:=xlWhole)
If Not rngF Is Nothing Then
For m = 1 To 3
If rngF.Offset(, m)  "" Then rngC.Offset(, m) = rngF.Offset(, m)
Next m
End If
Next
End With
End Sub

Gruß
Rudi
Anzeige
AW: Find Funktion in VBA
20.06.2011 14:35:04
kiki
Hallo Rudi,
vielen Dank, es funktioniert prima. Kleine Frage noch, ich möchte die Werte aus Tabelle1, die nicht in Tabelle2 auftauchen in eine Extraliste in Tabelle3 schreiben. Kann ich das in die If Schleife noch einbauen? Also wenn der Wert aus Tabelle1 nicht in Tabelle2 gefunden wird, dann wird er in Tabelle3 in eine Liste untereinander geschrieben. Ich habe versucht den Code zu ergänzen, aber es funktioniert nicht.
https://www.herber.de/bbs/user/75372.xls
Gruß, Kiki
Anzeige
AW: Find Funktion in VBA
20.06.2011 14:58:28
Rudi
Hallo,
      Else
wsListe.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = rngC

Gruß
Rudi
AW: Find Funktion in VBA
21.06.2011 09:42:17
kiki
Hallo,
er kopiert mir nun leider die gesamte Liste in die neue Tabelle und nicht nur die Einträge, die er in wsBasis nicht findet. Woran kann denn das liegen?
Gruß, kiki
Anzeige
AW: Find Funktion in VBA
21.06.2011 11:32:48
Rudi
Hallo,
bei mir nur alle aus Tab1, die in Tab2 nicht vorhanden sind.
Sub Kopieren()
Dim m As Integer
Dim wsBasis As Worksheet
Dim wsAktuell As Worksheet
Dim wsListe As Worksheet
Dim rngC As Range, rngF As Range
Set wsAktuell = ThisWorkbook.Worksheets("Tabelle1")
Set wsBasis = ThisWorkbook.Worksheets("Tabelle2")
Set wsListe = ThisWorkbook.Worksheets("Tabelle3")
Application.ScreenUpdating = False
With wsAktuell
For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
Set rngF = wsBasis.Columns(1).Find(rngC, lookat:=xlWhole)
If Not rngF Is Nothing Then
For m = 1 To 3
If rngF.Offset(, m)  "" Then rngC.Offset(, m) = rngF.Offset(, m)
Next m
Else
wsListe.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = rngC
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Gruß
Rudi
Anzeige
AW: Find Funktion in VBA
21.06.2011 19:26:48
kiki
Hallo Rudi,
tut mir leid, der Fehler lag in meiner Original Datei, da dort in der ersten Spalte keine Festwerte sind sondern Formeln. Mit Lookin xlValues hat es jetzt geklappt.
Vielen Dank für Deine Hilfe!!
Gruß, Kiki
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Find Funktion in VBA effektiv nutzen


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei mit den beiden Tabellenblättern, die Du bearbeiten möchtest.

  2. Öffne den VBA-Editor (Alt + F11) und füge ein neues Modul hinzu.

  3. Füge den folgenden VBA-Code ein, um die Find Funktion zu nutzen:

    Sub Kopieren()
       Dim m As Integer
       Dim wsBasis As Worksheet
       Dim wsAktuell As Worksheet
       Dim wsListe As Worksheet
       Dim rngC As Range, rngF As Range
    
       Set wsAktuell = ThisWorkbook.Worksheets("Tabelle1")
       Set wsBasis = ThisWorkbook.Worksheets("Tabelle2")
       Set wsListe = ThisWorkbook.Worksheets("Tabelle3")
    
       Application.ScreenUpdating = False
    
       With wsAktuell
           For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
               Set rngF = wsBasis.Columns(1).Find(rngC, lookat:=xlWhole)
               If Not rngF Is Nothing Then
                   For m = 1 To 3
                       If rngF.Offset(, m) <> "" Then rngC.Offset(, m) = rngF.Offset(, m)
                   Next m
               Else
                   wsListe.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = rngC
               End If
           Next
       End With
    
       Application.ScreenUpdating = True
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus (F5). Die Werte aus Tabelle2, die in Tabelle1 gefunden werden, werden kopiert und nicht gefundene Werte in Tabelle3 aufgelistet.


Häufige Fehler und Lösungen

  • Problem: Das Makro kopiert alle Einträge.

    • Lösung: Überprüfe, ob die Werte in Tabelle1 tatsächlich vorhanden sind. Stelle sicher, dass Du lookat:=xlWhole verwendest, um exakte Übereinstimmungen zu finden.
  • Problem: Ich erhalte keine Ergebnisse.

    • Lösung: Achte darauf, dass die Werte in Tabelle2 keine Formeln sind. Verwende LookIn:=xlValues, um die Werte zu vergleichen.

Alternative Methoden

Eine einfache Methode, die Find Funktion in VBA zu verwenden, ist die Nutzung der VBA .Find Methode anstelle von For Each. Hier ein Beispiel:

Set rngF = wsBasis.Columns(1).Find(What:=rngC.Value, LookIn:=xlValues, LookAt:=xlWhole)

Diese Methode ist besonders nützlich, wenn Du gezielt nach bestimmten Werten suchst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Find Funktion in einer Excel-Tabelle zu nutzen:

  1. Erstelle eine Tabelle mit numerischen Werten in Tabelle2.
  2. Füge die oben genannte VBA-Prozedur ein.
  3. Führe das Makro aus und überprüfe die Ergebnisse in Tabelle1 und Tabelle3.

Tipps für Profis

  • Nutze die Find Funktion effizient, indem Du LookIn und LookAt anpasst, um die Suche zu optimieren.
  • Teste Deine Makros in einer Kopie Deiner Datei, um Datenverlust zu vermeiden.
  • Verwende Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit zu erhöhen und Flackern zu vermeiden.

FAQ: Häufige Fragen

1. Wie funktioniert die Find Funktion in VBA?
Die Find Funktion in VBA sucht nach einem bestimmten Wert in einem angegebenen Bereich und gibt den Zellbereich zurück, wenn der Wert gefunden wird.

2. Was ist der Unterschied zwischen Find und FindNext?
Find sucht nach dem ersten Vorkommen eines Wertes, während FindNext verwendet wird, um das nächste Vorkommen desselben Wertes zu finden.

3. Kann ich die Find Funktion auch in anderen Excel-Versionen verwenden?
Ja, die Find Funktion ist in allen modernen Excel-Versionen verfügbar, solange Du VBA verwenden kannst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige