per Makro Tabelle durchsuchen und Ergebnis ausgeben
Guten Morgen,
ich stehe mal wieder (dank Makro) total auf dem "Schlauch" - ich weiss genau was ich machen will, bekomme es aber einfach nicht hin.....
Mein Problem:
Ich habe eine Tabelle mit Kundendaten, in diese möchte ich nun eine Suchfunktion einbauen, die abfragt ob der Kunde bereits angelegt ist.
Die Tabelle enthält ab B9 die Nachnamen, ab C9 die Vornamen
Zum suchen möchte ich folgende Felder verwenden:
in C4 würde ich den Nachnamen eingeben,
in C5 den Vornamen
Bei Übereinstimmung könnte sich ja evtl. ein Fenster öffnen, und die zugehörige Kundennummer/n (ab A9) anzeigen ?? oder direkt in die ensprechende Zelle springen ?? Ich weiss nicht genau wie man es anstellen kann mit Mehrfach-Ergebnissen (es kann ja 10 Kunden mit dem Namen Birgit Meier geben)
Kann mir jemand bei der Lösung helfen ???
Gruss - Petra
Antwort schreiben
Antwort 1 von Saarbauer vom 01.06.2021, 12:20 Options
Hallo,
ich würde dir vorschlagen es mit Autofilter über alle Spalten zu versuchen, da kannst du über alle Kriterien filtern. Ist unter "Daten", "Filter""Autofilter" zu finden
Gruß
Helmut
Antwort 2 von Petra65 vom 01.06.2021, 13:35 Options
Hallo,
ja - habe ich auch schon dran gedacht.
Das Problem ist nur, dass diejenige, die mit der Tabelle arbeiten muss, 2 "linke Hände" hat, ich werde ihr wahrscheinlich 10 mal erklären müssen wie man den Filter wieder auf "alle anzeigen" umstellt ... (ist wirklich so) !!
Das bringt mich auf eine Idee: Kann man nicht den Befehl, der hinter dem Autofilter sitzt (bezogen auf Spalte B) per Makro einbauen?? Und über eine Schaltfläche wieder alle Daten anzeigen lassen?? Würde ja vollkommena usreichen.
Gruss - Petra
Antwort 3 von fedjo vom 01.06.2021, 14:17 OptionsLösung
Hallo Petra,
Code in die Tabelle einfügen, wo gefiltert werden soll.
B4 =Nachname C4 = Vorname
Ist B4 leer wird der Filter zurückgesetzt.
Gruß
fedjo
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim Spalte As Range
Application.ScreenUpdating = False
Cells.Rows.EntireRow.Hidden = False
For Each Zelle In Range("B9:B" & Range("B65536").End(xlUp).Row)
If Zelle.Text <> Range("B4").Value Then
Zelle.Rows.EntireRow.Hidden = True
End If
Next
For Each Spalte In Range("C9:C" & Range("C65536").End(xlUp).Row)
If Spalte.Text <> Range("C4").Value Then
Spalte.Rows.EntireRow.Hidden = True
End If
Next
If Range("B4") = "" Then Cells.Rows.EntireRow.Hidden = False
End Sub
Antwort 4 von Petra65 vom 01.06.2021, 14:36 Options
Hallo Fedjo,
is ja genial ..... damit kommt auch meine Kollegin klar ;-)))
Super toll - vielen Dank!!
@Helmut: auch Dir Danke für die Anregung - hat mir mal wieder gezeigt wie kompliziert man denken kann, und dass es auch viel einfacher geht.
Viele Grüße - Petra
Antwort 5 von Petra65 vom 02.06.2021, 21:08 Options
Hallo,
noch eine Frage zu obrigem Makro:
ist es aufwendig das so zu gestalten, dass die Abfrage auch greift wenn z.B. nach Kleinbuchstaben gesucht wird (also meier statt Meier) oder auch bei Tippfehlern (Boeddeker statt Böddeker)??
LG
Petra
Antwort 6 von Dummy0815 vom 03.06.2021, 10:21 Options
Hallo
Zu 1
nutze Ucase()
Zu 2 einige Tips
Daten in ein Array
Vergleich,Umlaute und dessen Platzhalter ersetzen ,erneuter Vergleich
Antwort 7 von fedjo vom 04.06.2021, 18:18 Options
Hallo Petra,
Code in die Tabelle einfügen.
B4 = Nachname
Groß oder Kleinschreibung spielt keine Rolle.
Gruß
fedjo
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, firstAddress
Dim strSuch As String, rngBer As Range
Set rngBer = Range("B9:B" & Range("B65536").End(xlUp).Row)
With rngBer
strSuch = Range("B4").Value
If strSuch = "" Then
Cells.Rows.EntireRow.Hidden = False
Exit Sub
End If
Set c = .Find(strSuch, LookIn:=xlValues)
If c Is Nothing Then
MsgBox "Name nicht vorhanden"
Else
firstAddress = c.Address
Do
c.Activate
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Dim zelle As Range
Dim Spalte As Range
Application.ScreenUpdating = False
Cells.Rows.EntireRow.Hidden = False
For Each zelle In Range("B9:B" & Range("B65536").End(xlUp).Row - 1)
If zelle.Text <> ActiveCell Then
zelle.Rows.EntireRow.Hidden = True
End If
Next
End Sub
Antwort 8 von Petra65 vom 04.06.2021, 22:16 Options
Hallo Fedjo,
funktionier super gut ... ;-)
Was mich allerdings irritiet ist, dass bei jeder Suche der letzte
Datensatz mit angezeigt wird.
Stört nicht weiter - wundert mich nur... oder liegt es daran, dass sich (durch Umstrukturierung) einige Felder geändert haben??
In C5 = Nachnahme
ab B10 muss gesucht werden
Hab ich da evtl. was übersehen ???
Der Code sieht geändert so aus:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, firstAddress
Dim strSuch As String, rngBer As Range
Set rngBer = Range("B10:B" & Range("B65536").End(xlUp).Row)
With rngBer
strSuch = Range("C5").Value
If strSuch = "" Then
Cells.Rows.EntireRow.Hidden = False
Exit Sub
End If
Set c = .Find(strSuch, LookIn:=xlValues)
If c Is Nothing Then
MsgBox "Name nicht vorhanden"
Else
firstAddress = c.Address
Do
c.Activate
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Dim zelle As Range
Dim Spalte As Range
Application.ScreenUpdating = False
Cells.Rows.EntireRow.Hidden = False
For Each zelle In Range("B10:B" & Range("B65536").End(xlUp).Row - 1)
If zelle.Text <> ActiveCell Then
zelle.Rows.EntireRow.Hidden = True
End If
Next
End Sub
Gruss - Petra
Antwort 9 von fedjo vom 05.06.2021, 11:04 Options
Hallo Petra,
dann vielleicht so:
For Each zelle In Range("B10:B" & Range("B65536").End(xlUp).Row )
Gruß
fedjo
Antwort 10 von Petra65 vom 05.06.2021, 19:53 Options
Hallo Fedjo,
jep ;-)))) ..... genau das wars ......
vielen, vielen Dank ......
(ich wüsste gar nicht mehr was ich ohne dieses tolle Forum machen sollte )
Viele Grüße - Petra