Tabelle in mehreren Spalten durchsuchen

Hallo liebes Forum,

ich habe ein kleines Problem, bei dem ich nicht weiterkomme.
Ich möchte meine Exceltabelle (Datenblatt) mit einem Makro durchsuchen lassen. Dabei sollen die Werte aus 3 Spalten (also Spalte 1, Spalte 2 und Spalte 3) verglichen werden. Bei einem Treffer soll eine Messagebox mit den Inhalten ausgegeben werden, ansonsten eine Messagebox mit " nichts gefunden". Die 3 Spalten haben folgenden Inhalt: 1. Spalte Name, 2. Spalte Vorname, 3. Spalte Geburtsdatum. Wenn also nach Meier, Hans, 11.11.88 gesucht wird und diese Kombination in der Tabelle steht, soll dies in einer MsgBox ausgegeben werden. Leider kriege ich das ganze nur für eine Spalte hin, da meine Excelkenntnisse nicht so toll sind. Wäre schön, wenn mir jemand helfen kann.

ich habe ein kleines Problem, bei dem ich nicht weiterkomme.
Ich möchte meine Exceltabelle (Datenblatt) mit einem Makro
durchsuchen lassen. Dabei sollen die Werte aus 3 Spalten (also
Spalte 1, Spalte 2 und Spalte 3) verglichen werden. Bei einem
Treffer soll eine Messagebox mit den Inhalten ausgegeben
werden, ansonsten eine Messagebox mit " nichts gefunden". Die
3 Spalten haben folgenden Inhalt: 1. Spalte Name, 2. Spalte
Vorname, 3. Spalte Geburtsdatum. Wenn also nach Meier, Hans,
11.11.88 gesucht wird und diese Kombination in der Tabelle
steht, soll dies in einer MsgBox ausgegeben werden. Leider
kriege ich das ganze nur für eine Spalte hin, da meine
Excelkenntnisse nicht so toll sind. Wäre schön, wenn mir
jemand helfen kann.

Hi Achim,
da gibts verschiedene Ansätze, kommt auch daruaf an was du weiter vorhast, woher der zu suchende Name kommt, also wer ihn wann eingibt u.ä…
Hier mal einer, Leerzeichen, Kommata usw. mußte dir noch reinstricken :

Sub tt()
Dim Zei As Long, Bereich As Variant, Satz As String, Z As Long
Zei = Range("A" & Rows.Count).End(xlUp).Row
Bereich = Range("A1:C" & Zei)
For Z = 1 To Zei
 Satz = Satz & Bereich(Z, 1) & Bereich(Z, 2) & Format(Bereich(Z, 3), "dd.mm.yy")
Next Z
If InStr(Satz, "MeierHans11.11.88") \> 0 Then
 MsgBox "vorh"
Else
 MsgBox "nicht da"
End If
End Sub

Gruß
Reinhard

Hallo Achim,

dazu gibt es soetwas:

Set c = mySheet.Cells.Find(What:="Müller", LookIn:=xlValues, \_
 LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)

If Not c Is Nothing Then
 firstAddress = c.Address
 Do
 'hier die Prüfung der nachbarzellen einfügen und ggfs. melden
 if (mySheet.cells(c.Row, c.Colum + 1 = "" and ... then

 end if
 Set c = .FindNext(c)
 Loop While Not c Is Nothing And c.Address firstAddress
 End If

c zeigt dann auf die erste Fundstelle. Das Gebiet für die Suche kann auch ein Range, also auch eine Spalte sein sein.
Dann die Fundstellen durchlaufen.
c kennt die Eigenschaften Row und Column, damit kann man auch die Nachbarzellen finden.

Das erstmal als „Anregung“. ist nicht getestet und muss halt angepasst werden. Frag ggfs. nochmal.

mfg

Dirk.Pegasus

Hallo!
Vielen dank erstmal für Eure Hilfe.
Zweck des ganzen ist eine Überprüfung, ob die Daten in der Tabelle vorhanden sind oder nicht. Mehr soll auch mit der Abfrage nicht geschehen. Die Suchdaten werden in die ersten Zellen eingegeben.
Also Name in Zelle A1, Vorname in Zelle B1, Geburtsdatum in Zelle C1. Nach einem Klick auf einen Button soll dann das Script ausgeführt werden.

Gruß Achim

Zweck des ganzen ist eine Überprüfung, ob die Daten in der
Tabelle vorhanden sind oder nicht. Mehr soll auch mit der
Abfrage nicht geschehen. Die Suchdaten werden in die ersten
Zellen eingegeben.
Also Name in Zelle A1, Vorname in Zelle B1, Geburtsdatum in
Zelle C1. Nach einem Klick auf einen Button soll dann das
Script ausgeführt werden.

Hi Achim,
dann probiers so:

Sub tt()
Dim Zei As Long, Bereich As Variant, Satz As String, Z As Long
Zei = Range("A" & Rows.Count).End(xlUp).Row
Bereich = Range("A2:C" & Zei)
For Z = 1 To Zei
 Satz = Satz & Bereich(Z, 1) & Bereich(Z, 2) & Format(Bereich(Z, 3), "dd.mm.yyyy")
Next Z
If InStr(Satz, Range("A1") & Range("b1") & Range("c1")) \> 0 Then
 MsgBox "vorh"
Else
 MsgBox "nicht da"
End If
End Sub

Gruß
Reinhard

Vielen Dank, das klappt super! Allerdings unterscheidet das Makro Groß- u. Kleinschreibung. Gibt es auch noch eine Möglichkeit, die Unterscheidung von Groß-u. Kleinschreibung zu unterbinden?

Gruß Achim

Vielen Dank, das klappt super! Allerdings unterscheidet das
Makro Groß- u. Kleinschreibung. Gibt es auch noch eine
Möglichkeit, die Unterscheidung von Groß-u. Kleinschreibung zu
unterbinden?

Hi Achim,
dann so:

Sub tt()
Dim Zei As Long, Bereich As Variant, Satz As String, Z As Long
Zei = Range("A" & Rows.Count).End(xlUp).Row
Bereich = Range("A2:C" & Zei)
For Z = 1 To Zei
 Satz = Satz & UCase(Bereich(Z, 1)) & UCase(Bereich(Z, 2)) & Format(Bereich(Z, 3), "dd.mm.yyyy")
Next Z
If InStr(Satz, UCase(Range("A1")) & UCase(Range("b1")) & Range("c1")) \> 0 Then
 MsgBox "vorh"
Else
 MsgBox "nicht da"
End If
End Sub

Gruß
Reinhard

Vielen Dank, hat mir sehr geholfen!:smile:

Hi Reinhard,

leider funktioniert es doch nicht. Wenn ich in die Zellen A1, B1 und C1 meinen Suchbegfriff eingebe, zeigt der mir, obwohl das ganze Tabellenblatt leer ist, „vorh“ an. gebe ich nun zusätzlich zum Suchbegriff den gleichen nochmal ein paar Zeilen tiefer ein (z.B. A5, B5,C5), gibt er mir die Fehlermeldung „Index außerhalb des gültigen Bereiches an“. Woran liegt das?

Gruß Achim

leider funktioniert es doch nicht. Wenn ich in die Zellen A1,
B1 und C1 meinen Suchbegfriff eingebe, zeigt der mir, obwohl
das ganze Tabellenblatt leer ist, „vorh“ an. gebe ich nun
zusätzlich zum Suchbegriff den gleichen nochmal ein paar
Zeilen tiefer ein (z.B. A5, B5,C5), gibt er mir die
Fehlermeldung „Index außerhalb des gültigen Bereiches an“.
Woran liegt das?

Hallo Achim,
fiel mir beim Testen nicht auf, da ich Testdaten hatte und logo war die unterste nicht die Suchzeile :smile:
So müßte es klappen:

Option Explicit
'
Sub tt()
Dim Zei As Long, Bereich As Variant, Satz As String, Z As Long
Zei = Range("A" & Rows.Count).End(xlUp).Row
Bereich = IIf(Zei = 1, Range("A2:C2"), Range("A2:C" & Zei))
For Z = 1 To Zei - 1
 Satz = Satz & UCase(Bereich(Z, 1)) & UCase(Bereich(Z, 2)) & Format(Bereich(Z, 3), "dd.mm.yyyy")
Next Z
If InStr(Satz, UCase(Range("A1")) & UCase(Range("b1")) & Range("c1")) \> 0 Then
 MsgBox "vorh"
Else
 MsgBox "nicht da"
End If
End Sub

Gruß
Reinhard

Jetzt klappts wunderbar! Vielen Dank.

Gruß Achim