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

Forumthread: Do Schleife bei einer Suchfunktion (VBA UserForm)

Do Schleife bei einer Suchfunktion (VBA UserForm)
20.08.2015 15:28:23
Tobias
Hallo zusammen,
ich versuche Namen zu suchen in einer Tabelle. In A stehen die Nachnamen, in B Vornamen. Das ganze soll in einer VBA User Form geschehen.
Einzelne Nachnamen zu suchen ist kein Problem, Namen wie Müller, Meier etc. ;) kommen jedoch häufiger vor und sollen dann in Kombination mit dem Vornamen ausgegeben werden. Das Problem ist, dass ich nicht weiß wie ich eine passende Schleife da rein setzte, dass der solange sucht bis Vorname und Nachname in der gleiche Row gefunden werden.
Das ist mein Ansatz:
Private Sub Such_Click()
Dim i As Integer
Dim rZelle        As Range
Dim rZelle2        As Range
Dim sSuchbegriff  As String
Dim sSuchbegriff2  As String
If Trim$(TextBox1.Value)  "" Then
sSuchbegriff = Trim$(TextBox1.Value)
Else
MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
If Trim$(TextBox2.Value)  "" Then
sSuchbegriff2 = Trim$(TextBox2.Value)
Else
MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
Do
i = 1
Set rZelle = ThisWorkbook.Worksheets("Daten").Cells(i, 1).Find(what:=sSuchbegriff, LookAt:= _
xlPart, LookIn:=xlValues)
Set rZelle2 = ThisWorkbook.Worksheets("Daten").Cells(i, 2).Find(what:=sSuchbegriff2, LookAt:= _
xlPart, LookIn:=xlValues)
If rZelle.Row = rZelle2.Row Then
With ThisWorkbook.Worksheets("Daten").Columns(1)
If Not rZelle Is Nothing Then
Label2.Caption = .Range("A" & rZelle.Row).Value
Label3.Caption = .Range("B" & rZelle.Row).Value
Label4.Caption = .Range("C" & rZelle.Row).Value
Label5.Caption = .Range("D" & rZelle.Row).Value
Label6.Caption = .Range("E" & rZelle.Row).Value
Label7.Caption = .Range("F" & rZelle.Row).Value
Label44.Caption = .Range("G" & rZelle.Row).Value
Label9.Caption = .Range("H" & rZelle.Row).Value
Label10.Caption = .Range("I" & rZelle.Row).Value
Label11.Caption = .Range("J" & rZelle.Row).Value
Label12.Caption = .Range("K" & rZelle.Row).Value
Label13.Caption = .Range("L" & rZelle.Row).Value
Label14.Caption = .Range("M" & rZelle.Row).Value
Label15.Caption = .Range("N" & rZelle.Row).Value
Label16.Caption = .Range("O" & rZelle.Row).Value
Label17.Caption = .Range("P" & rZelle.Row).Value
Label39.Caption = .Range("Q" & rZelle.Row).Value
Label40.Caption = .Range("R" & rZelle.Row).Value
Label41.Caption = .Range("S" & rZelle.Row).Value
Label42.Caption = .Range("T" & rZelle.Row).Value
Label43.Caption = .Range("U" & rZelle.Row).Value
Label45.Caption = .Range("V" & rZelle.Row).Value
' usw.
Else
MsgBox "Der Begriff  """ & sSuchbegriff & """  wurde nicht gefunden.", _
48, "   Hinweis für " & Application.UserName
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End With
Else
i = i + 1
Loop
End If
Set rZelle = Nothing
Set rZelle2 = Nothing
End Sub
Das mit der Schleife stimmt vorne und hinten nicht,... wäre über Hilfe sehr dankbar.
Liebe Grüße
P.S vielleicht ist die schleife ja auch ein komplett falscher Ansatz, bitte um Aufklärung ;)

Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
20.08.2015 16:04:55
Matthias
Hallo Tobias,
ich bin leider in dem Thema nicht 100%ig bewandert, aber du könntest für die gefundenen Nachnamen die deiner Suche entsprechen dir einen String aus Vor- und Nachname machen lassen
(Var1=rZelle.value & Cells(rZelle.row,rZelle.Column+1).value)
und das gleiche natürlich mit deinen zwei Suchbegriffen. Wenn diese Strings übereinstimmen, dann BÄM.
lg Matthias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
20.08.2015 16:15:19
Tobias
aber trotzdem müsste hier doch auch eine schleife rein, dass wenn es nicht übereinstimmt in die nächste zeile gegangen wird ?
Stellst du dir das etwa so vor:

var1 = rZelle.Value & Cells(rezlle.Row, rZelle.Column + 1).Value
var2 = suchbegriff1 & suchberiff2
If var1 = var2 Then
auf rzelle2 könnte ich bei dieser Herangehensweise verzichten gell?

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 08:49:18
Matthias
Guten Morgen Tobias,
stimmt, rZelle2 ist dann nicht mehr nötig, nach ihr wird nicht gesucht.
Ich würde mit FindNext einfach solange den nächsten Nachnamen suchen, bis Var1 und Var2 sich gleichen und dann die Schleife verlassen. Die Namen waren nur ein Schnellschuss für den Grundgedanken, ich würd eventuell aussagekräftigere vergeben, Bsp.: sFullName1.
With ThisWorkbook.Worksheets("Daten").Range("A:A")
Set rZelle = .Find(sSuchbegriff, lookin:=xlValues)
If Not rZelle Is Nothing Then
firstAddress = rZelle.Address
Do
var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
var2 = sSuchbegriff1 & sSuchberiff2
If var1 = var2 Then Exit Do
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address  firstAddress
End If
End With 
'(Quelle: https://msdn.microsoft.com/de-de/library/office/Ff196143.aspx - Beispiel 1)
Diese Schleife funktioniert übrigens auch wenn die Namen nicht sortiert sind. Da du von "in die nächste Zeile gehen" geredet hast, nehme ich an dass sie es aber sind und damit untereinander stehen, richtig?
Kurze Frage zu deinem Code aus dem ersten Post:
Warum hast du eigentlich deine Suche auf eine Zelle begrenzt (Cells(i,1)) und dann i hochgezählt mit der Schleife, statt in der gesamten Spalte zu suchen. Dann könntest du nämlich gleich auf den Suchbefehl verzichten und einfach mit For i = 1 to "letzteZeile" alle Zeilen durchgehen, was bei langen Dokumenten durchaus Ressourcen frisst.
lg Matthias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 08:52:35
Matthias
Kleiner Fehler noch:
hinter sSuchbegriff die 1 entfernen:
var2 = sSuchbegriff1 & sSuchberiff2

Tut mir leid, das hab' ich so aus deinem vorigen Post übernommen ohne groß zu schaun.
lg Matthias

AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 10:07:03
Tobias
Hi Matthias,
erstmal vielen Dank für deine Hilfe.
Das mit den Cells war einfach so, habe viel ausprobiert ;).
Den Code hab ich so eingefügt. Richtig, die Namen sind alphabetisch sortiert, also muss man im Normalfall nur höchstens 2-3 Zeilen weiter runter.
Er zeigt bei der Suche leider immer noch den ersten Nachnamen an, und ignoriert dass die Vornamen nicht übereinstimmen. Die var1 = var2 Überprüfung scheint also nicht so ganz zu funktionieren.
Kannst du mir den firstaddress Teil einmal näher erläutern? Den verstehe ich nicht so ganz. Ist das einfach eine neue string? Weil sonst startet der Code gar nicht.
Lg
Tobias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 10:22:32
Matthias
Jupp,
das ist ein neuer String, welcher der Überprüfung dient ob ich in meiner Suche bereits mit dem Dokument durch bin oder nicht. Wie du siehst wird ihm die Adresse des ersten gefundenen Eintrags übergeben. Sobald diese rZelle diese Adresse wieder aufweist wird die Schleife mittels "While Not" beendet.
Eine Frage, hast du in deinem Code "Option Explicit" ganz oben stehn? Wenn nicht nutz das mal. Am Anfang ist es zwar nervig, aber man gewöhnt sich schnell daran. Dann findet man solche Fehler wie deinen relativ einfach. Ist als ob man die Oma korrekturlesen lässt. Ich verrats jedenfalls nicht woran es liegt ;)
lg Matthias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 10:31:24
Tobias
Hey,
ja klar, das steht drin. Das g Suchbegriff ist es nicht, das hab ich schon rausgemacht ;)
Es muss an der Überprüfung liegen oder ähnlichem, ich kann egal was für den Vornamen eingeben, es wird nicht berücksichtigt. Er sucht lediglich nach den Nachnamen und zeigt den ersten an den er gefunden hat.
Oder hab ich etwas anderes übersehen?

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 10:37:36
Tobias

var2 = sSuchbegriff1 & sSuchberiff2

bzw. ich hab das g ergänzt ;)

AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 11:18:41
Tobias
und ich hab leider rausgefunden, dass der var1 string nicht abgespeichert wird. Er erkennt cells(...).value nicht als text an sondern gibt nur den ersten Namen aus.

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 14:24:47
Matthias
Hallo Tobias,
mit diesem Makro hab ich in folgender Liste getestet, funktioniert prima:
Z A B
1 Peter Hansl
2 Stefan Hansl
3 Steffen Laver
4 Peter Meier
5 Maik Meier
6 Peter Zwickert
7 Robert Mayer
Sub Suche()
Dim sSuchbegriff As String
Dim sSuchbegriff2 As String
Dim rZelle As Range
Dim firstAddress As String
Dim Var1 As String
Dim Var2 As String
sSuchbegriff = "Peter"
sSuchbegriff2 = "Zwickert"
Var2 = sSuchbegriff & sSuchbegriff2
With ThisWorkbook.Worksheets("Tabelle2").Range("A:A") '###Worksheets("Daten")
Set rZelle = .Find(sSuchbegriff, LookIn:=xlValues)
If Not rZelle Is Nothing Then
firstAddress = rZelle.Address
Do
Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
MsgBox "Var1: " & Var1 & "  Var2: " & Var2 '###
If Var1 = Var2 Then GoTo Fund
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address  firstAddress
Set rZelle = Nothing 'kein Fund
MsgBox "Suchbegriff nicht gefunden."
Exit Sub '###Goto KeinFund
End If
Fund:
MsgBox "Gefundene Zelle: " & rZelle.Address '###
End With
End Sub
Mit '### gekennzeichte Zeilen sind von dir zu ändern bzw. von mir zu Testzwecken drinn, aber siehst du ja selbst. Damit kann ich jeden einzelnen Treffer für sSuchbegriff anzeigen lassen und prüfen. Dabei ist mir aufgefallen, dass ich ja keinen Abzweig für den Fall dass es den gesuchten Namen nicht gibt geschaffen habe. Dies sei hiermit nachgeholt. ExitSub muss an der Stelle nicht sein, wenn du noch andere Sachen vorhast.
Auch braucht man Var2 nicht mit jedem Schleifendurchlauf neu zu bestimmen, desshalb nach oben gepackt.
Ja, ich weis ich hab Vor- und Nachnamen vertauscht, das sollte aber nix ändern.
Kann es sein, dass du "sSuchbgegriff1" schreibst (s. letzter Post von dir)? Du hast die Variable doch ganz oben ohne 1 verwendet. Cells.value übergibt bei mir jedenfalls wie gewollt den Wert (Text) der Zelle (s. Ausgabe der MsgBox im Testprogramm). Hoffe es liegt nur daran.
lg Matthias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 14:24:53
Matthias
Hallo Tobias,
mit diesem Makro hab ich in folgender Liste getestet, funktioniert prima:
Z A B
1 Peter Hansl
2 Stefan Hansl
3 Steffen Laver
4 Peter Meier
5 Maik Meier
6 Peter Zwickert
7 Robert Mayer
Sub Suche()
Dim sSuchbegriff As String
Dim sSuchbegriff2 As String
Dim rZelle As Range
Dim firstAddress As String
Dim Var1 As String
Dim Var2 As String
sSuchbegriff = "Peter"
sSuchbegriff2 = "Zwickert"
Var2 = sSuchbegriff & sSuchbegriff2
With ThisWorkbook.Worksheets("Tabelle2").Range("A:A") '###Worksheets("Daten")
Set rZelle = .Find(sSuchbegriff, LookIn:=xlValues)
If Not rZelle Is Nothing Then
firstAddress = rZelle.Address
Do
Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
MsgBox "Var1: " & Var1 & "  Var2: " & Var2 '###
If Var1 = Var2 Then GoTo Fund
Set rZelle = .FindNext(rZelle)
Loop While Not rZelle Is Nothing And rZelle.Address  firstAddress
Set rZelle = Nothing 'kein Fund
MsgBox "Suchbegriff nicht gefunden."
Exit Sub '###Goto KeinFund
End If
Fund:
MsgBox "Gefundene Zelle: " & rZelle.Address '###
End With
End Sub
Mit '### gekennzeichte Zeilen sind von dir zu ändern bzw. von mir zu Testzwecken drinn, aber siehst du ja selbst. Damit kann ich jeden einzelnen Treffer für sSuchbegriff anzeigen lassen und prüfen. Dabei ist mir aufgefallen, dass ich ja keinen Abzweig für den Fall dass es den gesuchten Namen nicht gibt geschaffen habe. Dies sei hiermit nachgeholt. ExitSub muss an der Stelle nicht sein, wenn du noch andere Sachen vorhast.
Auch braucht man Var2 nicht mit jedem Schleifendurchlauf neu zu bestimmen, desshalb nach oben gepackt.
Ja, ich weis ich hab Vor- und Nachnamen vertauscht, das sollte aber nix ändern.
Kann es sein, dass du "sSuchbgegriff1" schreibst (s. letzter Post von dir)? Du hast die Variable doch ganz oben ohne 1 verwendet. Cells.value übergibt bei mir jedenfalls wie gewollt den Wert (Text) der Zelle (s. Ausgabe der MsgBox im Testprogramm). Hoffe es liegt nur daran.
lg Matthias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 14:29:22
Tobias
Jetzt klappt es doch irgendwie :)

With ThisWorkbook.Worksheets("Daten").Range("A1:A1000")
Set rzelle = .Find(sSuchbegriff, LookIn:=xlValues)
If Not rzelle Is Nothing Then
Do
firstaddress = rzelle.Address
var1 = rzelle.Value & Cells(rzelle.Row, rzelle.Column + 1).Value
var2 = sSuchbegriff & sSuchbegriff2
If var1 = var2 Then Exit Do
Set rzelle = .FindNext(rzelle)
Loop While Not rzelle Is Nothing And rzelle.Address  firstaddress
End If
End With
vielleicht siehst du den Unterschied ;)

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 15:06:44
Matthias
Hallo Tobias,
ich bin mir sicher du meinst nicht die Groß-/Kleinschreibung deiner Variablen, genausowenig wie die Änderung der Suchrange. Die Leerzeile ist auch ganz nett ;)
firstAddress in die Schleife zu nehmen hebelt den Sinn dieser Variablen aus. Du definierst sie ja nach bei Beginn jedes Durchgangs neu, und zwar mit der Zelle des letzten gefundenen "Müller"-Eintrags. Damit ist sie nicht mehr DAS Original. Das heisst: "Setzen, Sechs!"
lg Matthias

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 15:33:18
Tobias
ja du hast recht, ich war nur verwundert.. es ging wirklich kurzeitig, nun aber nicht mehr. Warum weiß ich auch nicht.
Aber das Problem, dass die var1 nicht beide Namen umfasst besteht trotzdem. Hab eine msgbox eingebaut und diese zeigt mir bei var1 immer nur den Nachnamen, bei var2 Nach- und Vorname an. So kann der Vergleich var1 = var2 ja nicht funktionieren.
Die Lösung scheint in weiter ferne :D

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 16:34:06
Matthias
Ich verstehe nicht warum...
Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value

bei dir kein Ergebnis liefert. Deine Vornamen stehen doch eine Spalte rechts der Nachnamen, richtig?
Da sich die Spalte nicht ändert, könntest du auch eine 2 draus machen bzw. schreiben:
Var1 = rZelle.Value & Range("B" & rZelle.Row).Value

Das sollte aber wenig am Sachverhalt ändern.
Egal bei welcher Variante geht noch:
Var1 = rZelle.Value & Range("B" & rZelle.Row).Formula

Wobei ich da kein Fan von bin.
lg

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
21.08.2015 19:24:01
Michael
Hi zusammen,
vermutlich deshalb, weil der . vor cells fehlt ...
Var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value

und sich das auf ein anderes Blatt bezieht.
Viel einfacher geht es (prinzipiell) so:
Var1 = rZelle.Value & rZelle.Offset(0, 1).Value

damit sind nämlich auch evtl. "seltsame" Blattzugehörigkeiten ausgeschlossen.
Ich hab das trotzdem mal nachgebastelt und lade die Datei hoch:
https://www.herber.de/bbs/user/99769.xls
Der Code ist hie und da "geglättet".
Schöne Grüße,
Michael

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
24.08.2015 08:28:57
Tobias
Top, funktioniert nun einwandfrei!
Var1 = rZelle.Value & rZelle.Offset(0, 1).Value

löst das Problem und ich kann nun ohne Probleme Vor- und Nachname suchen.
Vielen Dank euch beiden!!

freut mich, danke für die Rückmeldung owT
24.08.2015 15:03:53
Michael

Nachtrag
21.08.2015 19:25:39
Michael
Wenn es sich nicht gerade um 500 Namen handelt, finde ich die Lösung mit den "abhängigen Komboboxen" eigentlich viel Netter: http://www.j-hennekes.de/1298803.htm

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
20.08.2015 16:26:28
Tobias
Habe daraus mal die Schleife gemacht, funktioniert aber leider nicht.
Es kommt immer: Der Begriff wurde nicht gefunden.
Wie kann es nun weiter gehen?
Trotzdem danke Matthias, denke es ist ein guter Ansatz!!
Private Sub Such_Click()
Dim i As Integer
Dim rZelle        As Range
Dim rZelle2        As Range
Dim sSuchbegriff  As String
Dim sSuchbegriff2  As String
Dim var1 As String
Dim var2 As String
If Trim$(TextBox1.Value)  "" Then
sSuchbegriff = Trim$(TextBox1.Value)
Else
MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
If Trim$(TextBox2.Value)  "" Then
sSuchbegriff2 = Trim$(TextBox2.Value)
Else
MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
i = 0
While var1  var2
Set rZelle = ThisWorkbook.Worksheets("Daten").Cells(1 + i, 1).Find(what:=sSuchbegriff, LookAt:= _
xlPart, LookIn:=xlValues)
var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
var2 = sSuchbegriff & sSuchbegriff2
i = i + 1
Wend
With ThisWorkbook.Worksheets("Daten").Columns(1)
If Not rZelle Is Nothing Then
Label2.Caption = .Range("A" & rZelle.Row).Value
Label3.Caption = .Range("B" & rZelle.Row).Value
Label4.Caption = .Range("C" & rZelle.Row).Value
Label5.Caption = .Range("D" & rZelle.Row).Value
Label6.Caption = .Range("E" & rZelle.Row).Value
Label7.Caption = .Range("F" & rZelle.Row).Value
Label44.Caption = .Range("G" & rZelle.Row).Value
Label9.Caption = .Range("H" & rZelle.Row).Value
Label10.Caption = .Range("I" & rZelle.Row).Value
Label11.Caption = .Range("J" & rZelle.Row).Value
Label12.Caption = .Range("K" & rZelle.Row).Value
Label13.Caption = .Range("L" & rZelle.Row).Value
Label14.Caption = .Range("M" & rZelle.Row).Value
Label15.Caption = .Range("N" & rZelle.Row).Value
Label16.Caption = .Range("O" & rZelle.Row).Value
Label17.Caption = .Range("P" & rZelle.Row).Value
Label39.Caption = .Range("Q" & rZelle.Row).Value
Label40.Caption = .Range("R" & rZelle.Row).Value
Label41.Caption = .Range("S" & rZelle.Row).Value
Label42.Caption = .Range("T" & rZelle.Row).Value
Label43.Caption = .Range("U" & rZelle.Row).Value
Label45.Caption = .Range("V" & rZelle.Row).Value
' usw.
Else
MsgBox "Der Begriff  """ & sSuchbegriff & """  wurde nicht gefunden.", _
48, "   Hinweis für " & Application.UserName
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End With
Set rZelle = Nothing
Set rZelle2 = Nothing
End Sub

Anzeige
AW: Do Schleife bei einer Suchfunktion (VBA UserForm)
20.08.2015 16:26:33
Tobias
Habe daraus mal die Schleife gemacht, funktioniert aber leider nicht.
Es kommt immer: Der Begriff wurde nicht gefunden.
Wie kann es nun weiter gehen?
Trotzdem danke Matthias, denke es ist ein guter Ansatz!!
Private Sub Such_Click()
Dim i As Integer
Dim rZelle        As Range
Dim rZelle2        As Range
Dim sSuchbegriff  As String
Dim sSuchbegriff2  As String
Dim var1 As String
Dim var2 As String
If Trim$(TextBox1.Value)  "" Then
sSuchbegriff = Trim$(TextBox1.Value)
Else
MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
If Trim$(TextBox2.Value)  "" Then
sSuchbegriff2 = Trim$(TextBox2.Value)
Else
MsgBox "Sie müssen einen Suchbegiff eingeben - danke.", _
48, "   Hinweis für " & Application.UserName
Exit Sub
End If
i = 0
While var1  var2
Set rZelle = ThisWorkbook.Worksheets("Daten").Cells(1 + i, 1).Find(what:=sSuchbegriff, LookAt:= _
xlPart, LookIn:=xlValues)
var1 = rZelle.Value & Cells(rZelle.Row, rZelle.Column + 1).Value
var2 = sSuchbegriff & sSuchbegriff2
i = i + 1
Wend
With ThisWorkbook.Worksheets("Daten").Columns(1)
If Not rZelle Is Nothing Then
Label2.Caption = .Range("A" & rZelle.Row).Value
Label3.Caption = .Range("B" & rZelle.Row).Value
Label4.Caption = .Range("C" & rZelle.Row).Value
Label5.Caption = .Range("D" & rZelle.Row).Value
Label6.Caption = .Range("E" & rZelle.Row).Value
Label7.Caption = .Range("F" & rZelle.Row).Value
Label44.Caption = .Range("G" & rZelle.Row).Value
Label9.Caption = .Range("H" & rZelle.Row).Value
Label10.Caption = .Range("I" & rZelle.Row).Value
Label11.Caption = .Range("J" & rZelle.Row).Value
Label12.Caption = .Range("K" & rZelle.Row).Value
Label13.Caption = .Range("L" & rZelle.Row).Value
Label14.Caption = .Range("M" & rZelle.Row).Value
Label15.Caption = .Range("N" & rZelle.Row).Value
Label16.Caption = .Range("O" & rZelle.Row).Value
Label17.Caption = .Range("P" & rZelle.Row).Value
Label39.Caption = .Range("Q" & rZelle.Row).Value
Label40.Caption = .Range("R" & rZelle.Row).Value
Label41.Caption = .Range("S" & rZelle.Row).Value
Label42.Caption = .Range("T" & rZelle.Row).Value
Label43.Caption = .Range("U" & rZelle.Row).Value
Label45.Caption = .Range("V" & rZelle.Row).Value
' usw.
Else
MsgBox "Der Begriff  """ & sSuchbegriff & """  wurde nicht gefunden.", _
48, "   Hinweis für " & Application.UserName
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End With
Set rZelle = Nothing
Set rZelle2 = Nothing
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Do Schleife für die Excel Suchfunktion in VBA UserForms


Schritt-für-Schritt-Anleitung

  1. Erstelle eine UserForm in Excel mit zwei TextBoxen für die Eingabe von Vor- und Nachnamen.

  2. Füge einen Button hinzu und beschrifte ihn z.B. mit "Suchen".

  3. Öffne den VBA-Editor (ALT + F11) und navigiere zu deiner UserForm.

  4. Füge den folgenden Code in das Click-Ereignis des Buttons ein:

    Private Sub Such_Click()
       Dim i As Integer
       Dim rZelle As Range
       Dim sSuchbegriff As String
       Dim sSuchbegriff2 As String
    
       If Trim$(TextBox1.Value) <> "" Then
           sSuchbegriff = Trim$(TextBox1.Value)
       Else
           MsgBox "Bitte einen Nachnamen eingeben.", vbExclamation
           Exit Sub
       End If
    
       If Trim$(TextBox2.Value) <> "" Then
           sSuchbegriff2 = Trim$(TextBox2.Value)
       Else
           MsgBox "Bitte einen Vornamen eingeben.", vbExclamation
           Exit Sub
       End If
    
       Set rZelle = ThisWorkbook.Worksheets("Daten").Range("A:A").Find(sSuchbegriff, LookIn:=xlValues)
    
       If Not rZelle Is Nothing Then
           Do
               If rZelle.Offset(0, 1).Value = sSuchbegriff2 Then
                   ' Hier könnten Sie die gefundenen Namen anzeigen, z.B. in Labels
                   MsgBox "Gefunden: " & rZelle.Value & " " & rZelle.Offset(0, 1).Value
                   Exit Do
               End If
               Set rZelle = ThisWorkbook.Worksheets("Daten").Range("A:A").FindNext(rZelle)
           Loop While Not rZelle Is Nothing
       Else
           MsgBox "Der Nachname wurde nicht gefunden."
       End If
    End Sub
  5. Teste die UserForm mit verschiedenen Kombinationen von Vor- und Nachnamen.


Häufige Fehler und Lösungen

  • Fehler: "Der Begriff wurde nicht gefunden."

    • Lösung: Überprüfe, ob die Suchbegriffe korrekt eingegeben wurden. Achte auf Groß- und Kleinschreibung.
  • Fehler: var1 zeigt nur den Nachnamen an.

    • Lösung: Stelle sicher, dass du rZelle.Offset(0, 1).Value verwendest, um den Vornamen zu erhalten.
  • Fehler: Schleife läuft unendlich.

    • Lösung: Überprüfe, ob die Exit-Bedingung korrekt gesetzt ist. Die Schleife sollte nur laufen, solange rZelle nicht Nothing ist.

Alternative Methoden

Eine alternative Methode zur Implementierung der Excel Suchfunktion ist die Verwendung von Application.Match. Diese Methode kann schneller sein, wenn du nur nach dem ersten Vorkommen suchst:

Dim matchRow As Variant
matchRow = Application.Match(sSuchbegriff, ThisWorkbook.Worksheets("Daten").Range("A:A"), 0)

If Not IsError(matchRow) Then
    MsgBox "Gefunden in Zeile: " & matchRow
Else
    MsgBox "Nicht gefunden."
End If

Praktische Beispiele

In der Tabelle "Daten" befinden sich folgende Einträge:

Nachname Vorname
Müller Hans
Meier Peter
Zwickert Maria

Mit der do schleife in der Suchfunktion kannst du nun gezielt nach diesen Namen suchen und die entsprechenden Zeilen anzeigen lassen.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Fehler bei der Variablenzuweisung zu vermeiden.
  • Debugging: Setze Breakpoints im Code, um den Fluss der Variablen zu überprüfen.
  • Optimierung: Anstatt alle Zellen zu durchsuchen, kannst du Find und FindNext verwenden, um die Suche effizienter zu gestalten.

FAQ: Häufige Fragen

1. Wie funktioniert die do schleife in VBA?
Die do schleife in VBA führt einen Block von Code aus, solange eine bestimmte Bedingung wahr ist. In diesem Fall wird die Schleife verwendet, um durch die gefundenen Nachnamen zu iterieren, bis der Vorname übereinstimmt.

2. Was ist der Vorteil der Verwendung von Find?
Die Verwendung von Find ist effizienter als eine Schleife über alle Zellen, da sie direkt nach dem gesuchten Wert sucht und somit schneller ist.

3. Kann ich die Suchfunktion auch anpassen, um mehrere Suchbegriffe zu verwenden?
Ja, du kannst die Logik im Code anpassen, um mehrere Suchbegriffe zu kombinieren und die Suche entsprechend zu erweitern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige