Excel Suchfunktion für Spalte

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hier mal auf die schnelle ein ganz einfaches Makro, das in der Sp B das Vorkommen (auch mehrfaches) des Wertes in Zelle C1 mit roter Füllfarbe markiert:

Sub suchen1()
such = Cells(1, 3) 'Suchwort aus C1
letzteZ = Range("B65536").End(xlUp).Row
For i = 2 To letzteZ
  If Cells(i, 2) = such Then
    Cells(i, 2).Select
    Selection.Interior.Color = 255 'rot
  End If
Next
End Sub  

Um die Markierungen wieder zu löschen:

Sub Markierung_weg()
Range("B2:B2000").Select
Selection.Interior.Pattern = xlNone
Range("c1").Select
End Sub  

Weiterer "Firlefanz" wie "geben Sie Ihr Suchwort in C1 ein" oder "Groß/Kleinschreibung beachten" kann und sollte in Deiner Tabelle von Dir selbst ohne Schwierigkeiten machbar sein, oder ?

Gruß aus Berlin

Woher ich das weiß:Hobby – Jahrelanges programmieren.
SuchMakro - (Microsoft Excel, VBA, Suchfunktion)
albinoguitar 
Fragesteller
 11.04.2014, 10:11

Inzwischen habe ich zwar schon eine andere Lösung aber der Code, den du geschickt hast gefällt mir auch ziemlich gut!

Jetzt hab ich schon zwei Varianten und bin mit beiden mehr als nur zufrieden.

Auch in Zukunft wird mir deine Antwort (Code) wahrscheinlich noch oft behilflich sein.

lG und besten Dank

0

Warum nimmst du nicht den SVERWEIS dafür? z.B. auf ein neues Tabellenblatt die Abfrage geben und daneben dann die dazugehörigen Daten (weitere Felder) anzeigen. Das kannst du auch mit mehreren Treffern so einrichten :-)

albinoguitar 
Fragesteller
 10.04.2014, 16:16

Vielleicht würde das schon gehen.

Ich kenn es halt so, dass mir der SVERWEIS irgendwo ein Ergebnis hinspuckt und das wäre in dem Fall eher nicht wünschenswert.

Der Benutzer soll, wenn möglich, auf dem Tabellenblatt bleiben und dann nach der Eingabe seiner "Suchkriterien" zum Wort "geleitet" werden.

Excel sollte also beim Suchbegriff "´KVP" im Feld B6 anfgangen. Steht dort kein KVP geht es weiter auf B7. Danach auf B8. Wenn KVP dann irgendwann gefunden wird soll es einfach markiert und angezeigt werden, d.h. wenn dann bei B466 das gewünschte Wort steht, sollte Excel direkt dort hinspringen.

Würde das der SVERWEIS schaffen? :/ wüsste nicht wie, aber ich bin auch nicht gerade der Excel-Held :D

Wünschenswerter wäre es noch, dass Excel beim finden von KVP einfach eine bestimmte Umrandung macht und dann weiter sucht, bis alle Wörter markiert und die Tabelle in Spalte B am Ende ist.

0
albinoguitar 
Fragesteller
 10.04.2014, 16:27

Es gibt natürlich noch die Möglichkeit, dass ich einfach zu dumm dafür bin :D

0

Am einfachsten ist es, wenn du auf Spalte B einen Filter anwendest. In das Suchfeld des Filters gibst du die Anfangsbuchstaben ein (oder mit * auch die Mitte einer Zeichenkette), und schon werden alle nicht zutreffenden Ergebnisse ausgeblendet.

Alternativ über die Bedingte Formatierung. Neue Regel, Nur Zellen formatieren, die enthalten... Dort wählst du aus "Bestimmter Text" und verweist auf eine Zelle, die du als Suchfeld verwendest. Dann werden die Zellen zwar farblich markiert, allerdings springt der Cursor nicht dahin.

Danke an alle, die mir Antworten geschickt haben.

Besonderen Dank an Britzcontrol, die Lösung ist schon ziemlich edel.

Inzwischen bin ich noch auf einen weiteren Code im Internet gestoßen, der gewisse Spalten durchsucht. Muss eben individuell im Code angepasst werden. Könnte aber durchaus weitere Leser interessieren, die ein ähnliches Problem haben.

Sub ZellinhaltSuchen()
    Dim rngZelle As Range
    Dim strSuchbegriff As String
    Dim strStart As String
    Dim bytWeiter As Byte
    Dim lngLetzte As Long
    strSuchbegriff = InputBox("Suchbegriff:")
    If strSuchbegriff <> "" Then
      lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows.Count)
      With Range(Cells(3, 2), Cells(lngLetzte, 2))
         Set rngZelle = .Find(strSuchbegriff, lookat:=xlWhole, LookIn:=xlValues)
         If Not rngZelle Is Nothing Then
             strStart = rngZelle.Address
             Do
                 Application.Goto reference:=rngZelle, scroll:=True
                 bytWeiter = MsgBox("Weiter suchen?", vbOKCancel)
                 If bytWeiter = 2 Then Exit Do
                 Set rngZelle = .FindNext(rngZelle)
             Loop While Not rngZelle Is Nothing And rngZelle.Address <> strStart
         Else
           If rngZelle Is Nothing Then MsgBox "Suchbegriff nicht gefunden"
         End If
         Set rngZelle = Nothing
      End With
   End If
End Sub