Excel 2003 Suchfeld

  • #1
J

joergi78

Bekanntes Mitglied
Themenersteller
Dabei seit
17.08.2005
Beiträge
249
Reaktionspunkte
0
Hallo an alle,

besteht die Möglichkeit in Excel 2003 ein Suchfeld einzufügen, dass immer da ist und in dem man nach Zellen eines bestimmten Inhaltes suchen kann?
z.B. die Suche nach einer Telefonnummer mit der Endung 4711

wäre super
danke joergi78
 
  • #2
hi

es gibt die möglichkeit dies zu machen, einfach dies wäre dann ein Makro. Und ich weiss nicht ob du ein File haben willst welches Makros enthält.

mfg billy
 
  • #3
das wäre eine Idee. Wie würde denn das Makro dann aussehen?
Kannst du mir das sagen?
 
  • #4
gerade so hab ich keines mehr nee sorry =([br][br]Erstellt am: 31.08.05 um 17:45:32
[br]etwas müsste ich doch noch in erfahrung bringen, suchst du dann immer nur nach telefonnummern oder auch mal was anderes?
 
  • #5
Hallo joergi,

willst Du in einer Adressliste Telefonnummern suchen ?
Stehen die Telefonnummern in einer bestimmten Spalte ?
Sollen die gefundenen Zeilen markiert, angesprungen oder die restlichen Zeilen  ausgeblendet werden ?

Beschreib mal etwas genauer, was Du brauchst ?

Gruß Matjes :)
 
  • #6
Matjes schrieb:
Hallo joergi,

willst Du in einer Adressliste Telefonnummern suchen ?
Stehen die Telefonnummern in einer bestimmten Spalte ?
Sollen die gefundenen Zeilen markiert, angesprungen oder die restlichen Zeilen  ausgeblendet werden ?

Beschreib mal etwas genauer, was Du brauchst ?

Gruß Matjes :)
guten morgen,
genau, ich will nach einer Telefonnummer suchen.
die restlichen Zeilen sollen dann ausgeblendet werden.
Es sollte aber auch so funktionieren, dass ich den Namen eingebe und ich dann nur die Daten zu dem Namen angezeigt werden und dre Rest wird auch wieder ausgeblendet.
 
  • #7
Hallo Joergi,

das könnte man mit einer zusätzlichen Zeile in dieser Telefonliste lösen, deren Zellinhalt dann überwacht wird.

Gibt man in einer Zelle dieser Zeile etwas ein, werden alle Zeilen unterhalb ausgeblendet, die nicht inder betreffenden Spalte den Suchbegriff enthalten.

Soll da Groß und Kleinschreibung unterschieden werden oder ist das nicht nötig ?

Welche Formatierung haben die Spalten ?

Gruß Matjes :)
 
  • #8
Groß- und Kleinschreibung ist egal.
Du hörst dich wieder Vielversprechend an.
 
  • #9
Hallo Joergi78,

schick mir doch mal deine Datei auf 2-3 Adresszeilen reduziert.
Dann schau ich heute abend mal, wie man das efizient lösen kann.

Gruß Matjes :)
 
  • #10
sieht z.B. so aus

Suche:
Name Vowahl Telefon Netz Mobil[/b]
Frank 05543 1234567 0162 89594681
Dieter 03391 5454893 0173 60023373
Peter 04896 7763895 0171 54698255
 
  • #11
Hallo Joergi,

Ich hab dir eine entsprechende Suchfunktion zusammengebaut.

Die Eingabe des jeweiligen Suchbegriffs bzgl. der Spalte erfolgt in einer Zeile oberhalb der Liste. Dazu fügst Du oberhalb deiner Telefonliste eine Zeile ein. Zur optischen Hervorhebung kannst du den Zellen dieser Zeile z.B. gelb einen gelben Hintergrund geben.

Die Spalten der Telefonliste sollten als->Text' formatiert sein.

Öffne die Telefonliste und lege mit dem VB-Editor ein Modul in dieser Mappe an. Den nachfolgenden Code kopierst Du in dieses Modul. Die Werte c_SUCHZEILE, c_SUCHSPALTE_AB, c_SUCHSPALTE_BIS, c_ERSTEWERTEZEILE mußt Du den Gegebenheiten anpassen, also
- c_SUCHZEILE -> Zeilennummer eintragen, die gelb gekennzeichnet ist
- c_SUCHSPALTE_AB -> Spaltennummer der ersten relevanten Spalte
- c_SUCHSPALTE_NIS -> Spaltennummer der letzten relevanten Spalte
- c_ERSTEWERTEZEILE -> erste Zeile mit Adressdaten

Damit hast Du das Handwerkzeug :)


Code:
Option Explicit
  Type MySuchbegriffe_structure
    s_Suchbegriff As String
    l_Spalte As Long
    z_cnt As Long
    z() As Long
  End Type
  
'#### A N P A S S E N ###############
 ->Definitionen der Suchfelder
  Public Const c_SUCHZEILE = 2
  Public Const c_SUCHSPALTE_AB = 1 ->entspricht Spalte A
  Public Const c_SUCHSPALTE_BIS = 5->entspricht Spalte E
  
 ->erste Zeile mit Adressdaten
  Public Const c_ERSTEWERTEZEILE = 4
'#### A N P A S S E N ###############
  
  Public ws As Worksheet
'*****************************************************************
Function ZeilenMitSuchbegriffenAnzeigen( _
                          ws As Worksheet, _
                          f() As MySuchbegriffe_structure, _
                          f_cnt As Long)
  
  Dim l_ZeileMax As Long, x As Long, z As Long
  
 ->erstmal alle Zeilen ausblenden
  l_ZeileMax = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1
  ws.Rows(c_ERSTEWERTEZEILE & : & l_ZeileMax).Hidden = True
  
 ->gemerkte Zeilen mit Fundort einblenden
  For x = 1 To f_cnt: For z = 1 To f(x).z_cnt: ws.Rows(f(x).z(z)).Hidden = False: Next z: Next x

End Function
'*****************************************************************
Function SuchbegriffeFeststellen( _
                          ws As Worksheet, _
                          f() As MySuchbegriffe_structure, _
                          f_cnt As Long)
  
  Dim s_Suchbegriff As String, c As Long

 ->Alle Suchbegriffe feststellen
  f_cnt = 0: ReDim f(1 To 1)
  For c = c_SUCHSPALTE_AB To c_SUCHSPALTE_BIS
    s_Suchbegriff = Trim(ws.Cells(c_SUCHZEILE, c).Value)
   ->Suchbegriff nicht leer ?
    If s_Suchbegriff <>  Then
     ->Suchbegriff und Spalte merken
      f_cnt = f_cnt + 1: ReDim Preserve f(1 To f_cnt)
      With f(f_cnt)
        .s_Suchbegriff = s_Suchbegriff
        .l_Spalte = c
       ->Zeilenmerker initialisieren
        .z_cnt = 0: ReDim .z(1 To 1)
      End With
    End If
  Next

End Function

'*****************************************************************
Function ZeilenMitSuchbegriffSuchen( _
                          ws As Worksheet, _
                          f() As MySuchbegriffe_structure, _
                          f_cnt As Long) As Boolean
      
  Dim r As Range, Zelle As Range
  Dim l_ZeileMax As Long, s_ersteAdresse As String, x As Long
  Dim b_MindestensEineZeileRelevant As Boolean
  
  b_MindestensEineZeileRelevant = False

 ->Zeilen mit Suchbegriff suchen
  l_ZeileMax = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1
 ->für alle Suchbegriffe
  For x = 1 To f_cnt
    With f(x)
      Set r = ws.Range( _
                  ws.Cells(c_ERSTEWERTEZEILE, .l_Spalte), _
                  ws.Cells(l_ZeileMax, .l_Spalte))
      Set Zelle = r.Find( _
                    What:=.s_Suchbegriff, _
                    After:=ws.Cells(l_ZeileMax, .l_Spalte), _
                    LookIn:=xlValues, _
                    lookat:=xlPart)
      If Not Zelle Is Nothing Then
        s_ersteAdresse = Zelle.Address
        Do
         ->Zeile zum Suchbegriff merken
          .z_cnt = .z_cnt + 1: ReDim Preserve .z(1 To .z_cnt)
          .z(.z_cnt) = Zelle.Row
         ->Rückgabekennung setzen
          b_MindestensEineZeileRelevant = True
         ->nächsten Fundort suchen
          Set Zelle = r.FindNext(Zelle)
        Loop While Not Zelle Is Nothing And Zelle.Address <> s_ersteAdresse
      End If
    End With
  Next

  Set r = Nothing: Set Zelle = Nothing

  ZeilenMitSuchbegriffSuchen = b_MindestensEineZeileRelevant
End Function


Der folgende Code muß in die Code-Seite des Tabellenblattes kopiert werden.
Dort kommt man am einfachsten hin, in dem man in Excel die Blattlasche mit der rechten Maustaste anklickt und->Code anzeigen' auswählt.

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  
  
  Dim f_Suchbegriff() As MySuchbegriffe_structure, f_Suchbegriff_cnt As Long
  Dim s_Blattname As String, ws as Worksheet
  
  s_Blattname = Target.Parent.Name
  Set ws = Worksheets(s_Blattname)
  
 ->Ist etwas in der Suchzeile geändert worden ?
  If Target.Rows.Count = 1 And Target.Row = c_SUCHZEILE Then
   ->Sind die Spalten der Suchfelder betroffen ?
    If Target.Column >= c_SUCHSPALTE_AB And Target.Column <= c_SUCHSPALTE_BIS Then
    
     ->Bildschirmupdate abschalten
      Application.ScreenUpdating = False
      
     ->erstmal alle Zeilen einblenden
      Cells.EntireRow.Hidden = False
      
     ->vorhandene Suchbegriffe feststellen
      Call SuchbegriffeFeststellen(ws, f_Suchbegriff, f_Suchbegriff_cnt)
      
     ->kein Suchbegriff vorhanden -> ENDE
      If f_Suchbegriff_cnt = 0 Then GoTo AUFRAEUMEN
      
     ->Zeilen mit Suchbegriff suchen
      If ZeilenMitSuchbegriffSuchen(ws, f_Suchbegriff, f_Suchbegriff_cnt) Then
        
       ->mindestens Suchbegriff in einer Zeile gefunden
       ->gemerkte Zeilen mit Fundort einblenden
        Call ZeilenMitSuchbegriffenAnzeigen(ws, f_Suchbegriff, f_Suchbegriff_cnt)
        
      Else
       ->keinen Suchbegriff in einer Zeile gefunden
       ->--> alle Zeilen eingeblendet lassen
      End If
    End If
  End If
  
AUFRAEUMEN:
  Set ws = Nothing
 ->Bildschirmupdate anschalten
  Application.ScreenUpdating = True
End Sub

Nun kannst Du die neue Suchen-Funktion ausprobieren.

Wenn Du z.B. einen Suchbegriff->a' im gelben Feld der Spalte Namen eingibst (Eingabe mit Return abschliessen oder ander Zelle selektieren), werden alle Zeile ausgeblendet, die in der Namen-Spalte kein->a' beinhalten.

Wenn Du in einem gelben Feld einer anderen Spalte (z.B. Vorwahl) 55 eingibst, werden dir zusätzlich die Zeilen angezeigt, die in->Vorwahl' die 55 enthalten. 

Willst Du die Zeilen bzgl. einem Suchbegriff wieder ausblenden, einfach den Inhalt der entsprechenden gelben Zelle löschen.

Befinden sich nur Suchbegriffe in den gelben Zellen, die in der entsprechenden Spalte nicht enthalten sind, also kein Suchbegriff zu finden, werden alle Zeilen angezeigt.

Wenn Du es besser findest, immer nur einen Suchbegriff zu verwenden, kann ich das auch noch so umbauen, daß nach der Suche die Eingabefelder für die Suchbegriffe wieder leer sind oder daß der zuletzt eingegebene Suchbegriff der massgebende ist.

Probier's mal aus.

Gruß Matjes :)
 
  • #12
guten morgen an alle,  :D
leider funktioniert es noch nicht  :(
ich bekomme folgende Fehlermeldung:
Fehler beim kompilieren
Variable nicht definiert
Set ws = Nothing: Set r = Nothing
woran liegt das?
 
  • #13
Hallo Joergi,

da ist meinem Excel wohl etwas durch die Lappen gegangen :mad:

Hab den 2. Makro korrigiert (siehe oben).

Gruß Matjes :)
 
  • #14
jetzt bekomme ich folgende Fehlermeldung:
Fehler beim kompilieren
Methode oder Datenobjekt nicht gefunden

für alle Suchbegriffe
For x = 1 To f_cnt
With f(x)
Set r = ws.Range( _
ws.Cells(c_ERSTEWERTEZEILE, .l_Spalte), _
ws.Cells(l_ZeileMax, .l_Spalte))
Set Zelle = .Find( _
What:=.s_Suchbegriff, _
After:=ws.Cells(l_ZeileMax, .l_Spalte), _
LookIn:=xlValues, _
lookat:=xlPart)
If Not Zelle Is Nothing Then
s_ersteAdresse = Zelle.Address
Do
 
  • #15
Hi joergi,

ist korrigiert.
Es muß heissen
Set Zelle = r.Find( _
statt
Set Zelle = .Find( _

Was ist den da gestern passiert :mad:

Gruß Matjes :)
 
  • #16
hast du das im Makro unten geändert?
Oder soll ich mir die Stelle raussuchen?[br][br]Erstellt am: 02.09.05 um 09:28:20
[br]habe die Stelle gefunden
[br][br]Erstellt am: 02.09.05 um 09:33:01
[br]aber welchen Teil muss ich denn ändern, wenn die Nummern in Spalte B und Spalte E stehen?[br][br]Erstellt am: 02.09.05 um 09:33:54
[br]was muss ich denn ändern, wenn die Nummern in Spalte B und E stehen?
Das klappt leider noch nicht.
Ich will aber auch den Namen eingeben. Wenn das geht. Das ist aber nicht ganz so wichtig.
8)
 
  • #17
DANKE!!!
Meine Fragen haben sich erledigt.
War ein bisschen beschränkt ::)
Es klappt wunderbar!!! :D
Bis bald
Ciao und ein schönes Wochenende
Gruß Joergi78 ::)
 
  • #18
:D ERWEITERUNG!!! :D
Kann ich das Suchfeld auch so anpassen, dass die Zeile und eine Zeile darunter nach der Suche angezeigt werden???
Das wäre SUPER 8)
 
  • #19
Hallo Joergi,

hoffentlich hab ich das richtig verstanden. Du willst zu der/den angezeigten Zeilen jeweils auch die nachfolgende Zeile anzeigen.

Dazu müßte die Function ZeilenMitSuchbegriffenAnzeigen wie folgt geändert werden.

Gruß Matjes :)
Code:
Function ZeilenMitSuchbegriffenAnzeigen( _
                          ws As Worksheet, _
                          f() As MySuchbegriffe_structure, _
                          f_cnt As Long)
  
  Dim l_ZeileMax As Long, x As Long, z As Long
  
 ->erstmal alle Zeilen ausblenden
  l_ZeileMax = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1
  ws.Rows(c_ERSTEWERTEZEILE & : & l_ZeileMax).Hidden = True
  
 ->gemerkte Zeilen mit Fundort einblenden
  For x = 1 To f_cnt: For z = 1 To f(x).z_cnt
    ws.Rows(f(x).z(z)).Hidden = False
   ->### Und fuer Joergi auch noch die darauffolgende Zeile ###'
    ws.Rows(f(x).z(z) + 1).Hidden = False
  Next z: Next x

End Function
 
  • #20
guten morgen Matjes,
ja du hast es richtig verstanden :D
es hat auch geklappt. :D
du bist wunderbar
DANKE :D
gruß Joergi78
 
Thema:

Excel 2003 Suchfeld

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben