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

Forumthread: Arbeitsmappe durchsuchen & Ergebnise anzeigen

Arbeitsmappe durchsuchen & Ergebnise anzeigen
23.06.2005 10:57:01
Rausch
Hallo,
habe da ein grosses Problem und hoffe es kann mir jemand helfen.
Ich habe eine Excel Datei mit 40 Tabellenblätter und möchte einer
Schaltfläche ein Makro zuweisen worauf sich ein Fenster öffnen sollte wo ich
dann einen Begriff hineinschreiben kann und eine Suche über alle 40 Blätter
nach dem Begriff gestartet werden sollte. Am Ende der Suche sollte es möglich
sein mir die Anzahl der gefundenen Begriffe zu zeigen sowie auf einem Extra Tabellenblatt, was ich vorher anlege, alle Tabellenblattnamen wo der Begriff vorkommt, aufzulisten.
Beispiel:
1. Tabellenblatt heisst Hugo
2. Tabellenblatt heisst Bernd
3. Tabellenblatt heisst Gabi
4. Tabellenblatt heisst Silvio
Eine Tabelle hat den Namen "Suchergebnisse"
usw.
In diesen Blättern sind Daten wie z.B. Städtenamen eingetragen, wie etwa Bern
Nun möchte ich das ich auf meine Schaltfläche klicke worauf sich ein Fenster öffnet und mir sagt: "Geben Sie den gewünschten Suchbegriff ein"
Dort gebe ich dann z.B. "Bern" ein
Anmerkung: Aus Bern kommen Gabi und Hugo
Es sollte dann die Suche gestartet werden und danach als Ergenis "2 Treffer" herauskommen aber auch in meinem Tabellenblatt "Suchergebnisse" sollte dies nun ersichtlich sein.
Dort müsste dann eine Auflistung der Tabellenblattnamen mit den gefundenen Begriffen stehen, also so wie hier im Beispiel müsste dann als Ergenis folgendes dastehen:
Gabi
Hugo
Habe bereits alles mit der eingebauten Suchfunktion von Excel probiert, komme aber nicht mehr weiter und bitte darum Euch um Hilfe mir ein mögliches Makro zu erstellen. Ich Danke allen die mir eine Antwort schreiben und verbleibe mit freundlichen Grüssen
Kurt
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitsmappe durchsuchen & Ergebnise anzeigen
23.06.2005 11:22:48
GraFri
Hallo
Vielleicht hilft dir folgender Code weiter.


      
Option Base 1
Option Compare Text
Sub Suchen_und_anzeigen()
Dim Meldung         As Byte, Pos        As Byte
Dim Schleife        As Byte, y          As Byte
Dim Begriff, Suchen()                   As Variant
Dim Bereich                             As Range
Dim n%, x%, xZelle%, yZelle%
Dim xTabelle$(), Adresse$(), Text$
'Bereich festlegen
Set Bereich = Application.InputBox _
("Bitte den zu durchsuchenden Bereich eingeben " & vbCrLf & _
 "(z.B.:  A1:A200),oder markieren Sie den Such-" & vbCrLf & _
  "bereich im Tabellenblatt.", "Bereich festlegen", "A1:A200", Type:=8)
' Suchbegriff eingeben
Begriff = InputBox _
("Bitte den zu suchenden Wert eingeben. Sollen 2 Werte" & vbCrLf & _
 "gleichzeitig gesucht werden, dann mit Zeichen  +  " & vbCrLf & _
 "voneinander trennen (z.B.: Summe+die)." & vbCrLf & vbCrLf & _
 "ENTER ohne Wert = Abbruch", "S U C H M O D U S")
If Begriff = "" Then Exit Sub
Pos = InStr(Begriff, "+")
If Pos Then
    
ReDim Suchen(2)
    Suchen(1) = Left(Begriff, Pos - 1)
    Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
    Schleife = 2
Else
    
ReDim Suchen(1)
    Suchen(1) = Begriff
    Schleife = 1
End If
Application.ScreenUpdating = 
False
' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
' des Bereiches beginnt.
With Worksheets(1).Range(Bereich.Address)
    xZelle = .Columns(.Columns.Count).Column
    yZelle = .Rows(.Rows.Count).Row
End With
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
x = 1
For y = 1 To Schleife
For n = 1 To Sheets.Count
With Sheets(n).Range(Bereich.Address)
    
Set c = .Find(Suchen(y), after:=Cells(yZelle, xZelle), LookIn:=xlValues)
    
If Not c Is Nothing Then
        ErsteAdresse = c.Address
        
Do
            
ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
            xTabelle(x) = Sheets(n).Name
            Adresse(x) = c.Address(RowAbsolute:=
False, ColumnAbsolute:=False)
            
Set c = .FindNext(c)
            x = x + 1
        
Loop While Not c Is Nothing And c.Address <> ErsteAdresse
    
End If
End With
Next n
Next y
Application.ScreenUpdating = 
True
' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
' gefunden wurde dann ist x = 1
Select Case x
Case 1
    Meldung = MsgBox("Es wurde kein übereinstimmender Wert gefunden", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
    
Exit Sub
Case Else
    Meldung = MsgBox("Es wurden " & (x - 1) & " Übereinstimmungen gefunden.", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
'Tabelle einfügen
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
    .Name = "Suchergebnis"
    .[A1] = "Tabelle"
    .[B1] = "Zelle"
    
For n = 1 To x - 1
        .Cells(n + 1, 1) = xTabelle(n)
        .Cells(n + 1, 2) = Adresse(n)
    
Next n
End With
End Select
End Sub
Bei weiteren Fragen einfach melden.
mfg, GraFri
Anzeige
AW: Arbeitsmappe durchsuchen & Ergebnise anzeigen
23.06.2005 11:56:59
Rausch
Hallo,
danke für die Antwort. Ja es sit so wie ich es mir vorstelle, nur beim klick
auf meine Schaltfläche fragt er jetzt nach Bereich festlegen. Es wäre toll wenn dies nicht da wäre, sondern einfach eine Zeile wo ich meinen Begriff eingeben kann da der Bereich ja alle Tabellenblätter sind.
mfg Kurt
Anzeige
AW: Arbeitsmappe durchsuchen & Ergebnise anzeigen
23.06.2005 12:20:38
GraFri
Hallo
Geänderter Code. Sollte so funktionieren.


      
Option Base 1
Option Compare Text
Sub Suchen_und_anzeigen()
Dim Meldung         As Byte, Pos        As Byte
Dim Schleife        As Byte, y          As Byte
Dim Begriff, Suchen()                   As Variant
Dim Bereich                             As Range
Dim n%, x%, xZelle%, yZelle%
Dim xTabelle$(), Adresse$(), Text$
' Suchbegriff eingeben
Begriff = InputBox _
("Bitte den zu suchenden Wert eingeben. Sollen 2 Werte" & vbCrLf & _
 "gleichzeitig gesucht werden, dann mit Zeichen  +  " & vbCrLf & _
 "voneinander trennen (z.B.: Summe+die)." & vbCrLf & vbCrLf & _
 "ENTER ohne Wert = Abbruch", "S U C H M O D U S")
If Begriff = "" Then Exit Sub
Pos = InStr(Begriff, "+")
If Pos Then
    
ReDim Suchen(2)
    Suchen(1) = Left(Begriff, Pos - 1)
    Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
    Schleife = 2
Else
    
ReDim Suchen(1)
    Suchen(1) = Begriff
    Schleife = 1
End If
Application.ScreenUpdating = 
False
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
x = 1
For y = 1 To Schleife
  
For n = 1 To Sheets.Count
  
  
' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
  ' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
  ' des Bereiches beginnt.
  'Bereich festlegen
  Set Bereich = Worksheets(n).UsedRange
  
  
  
With Worksheets(n).Range(Bereich.Address)
      xZelle = .Columns(.Columns.Count).Column
      yZelle = .Rows(.Rows.Count).Row
  
End With
  
With Sheets(n).Range(Bereich.Address)
      
Set c = .Find(Suchen(y), after:=Cells(yZelle, xZelle), LookIn:=xlValues)
      
If Not c Is Nothing Then
          ErsteAdresse = c.Address
          
Do
              
ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
              xTabelle(x) = Sheets(n).Name
              Adresse(x) = c.Address(RowAbsolute:=
False, ColumnAbsolute:=False)
              
Set c = .FindNext(c)
              x = x + 1
          
Loop While Not c Is Nothing And c.Address <> ErsteAdresse
      
End If
  
End With
  
Next n
Next y
Application.ScreenUpdating = 
True
' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
' gefunden wurde dann ist x = 1
Select Case x
Case 1
    Meldung = MsgBox("Es wurde kein übereinstimmender Wert gefunden", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
    
Exit Sub
Case Else
    Meldung = MsgBox("Es wurden " & (x - 1) & " Übereinstimmungen gefunden.", _
    vbOKOnly, "G E F U N D E N E   W E R T E")
'Tabelle einfügen
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
    .Name = "Suchergebnis"
    .[A1] = "Tabelle"
    .[B1] = "Zelle"
    
For n = 1 To x - 1
        .Cells(n + 1, 1) = xTabelle(n)
        .Cells(n + 1, 2) = Adresse(n)
    
Next n
End With
End Select
End Sub
Bei weiteren Fragen einfach melden.
mfg, GraFri
Anzeige
AW: Arbeitsmappe durchsuchen & Ergebnise anzeigen
23.06.2005 12:39:23
Rausch
Hallo,
ich Danke Dir recht Herzlich. Es sit genau so wie ich es mir Vorgestellt habe.
Wünsche noch eine schöne und erfolgreiche Woche.
mfg Kurt
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Arbeitsmappe durchsuchen und Ergebnisse anzeigen


Schritt-für-Schritt-Anleitung

Um eine Excel Arbeitsmappe zu durchsuchen und die Ergebnisse anzuzeigen, kannst Du ein Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und erstelle ein neues Arbeitsblatt oder öffne eine bestehende Datei mit mehreren Tabellenblättern.

  2. Aktiviere die Entwicklertools: Gehe zu Datei > Optionen > Menüband anpassen und aktiviere die Entwicklertools.

  3. Öffne den VBA-Editor: Klicke auf Entwicklertools und dann auf Visual Basic.

  4. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xls) und wähle Einfügen > Modul.

  5. Kopiere den folgenden VBA-Code in das Modul:

    Option Base 1
    Option Compare Text
    
    Sub Suchen_und_anzeigen()
       Dim Meldung As Byte, Pos As Byte
       Dim Schleife As Byte, y As Byte
       Dim Begriff, Suchen() As Variant
       Dim Bereich As Range
       Dim n%, x%, xZelle%, yZelle%
       Dim xTabelle$(), Adresse$(), Text$
    
       Begriff = InputBox("Bitte den zu suchenden Wert eingeben.")
       If Begriff = "" Then Exit Sub
    
       Pos = InStr(Begriff, "+")
       If Pos Then
           ReDim Suchen(2)
           Suchen(1) = Left(Begriff, Pos - 1)
           Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
           Schleife = 2
       Else
           ReDim Suchen(1)
           Suchen(1) = Begriff
           Schleife = 1
       End If
    
       Application.ScreenUpdating = False
       x = 1
       For y = 1 To Schleife
           For n = 1 To Sheets.Count
               With Sheets(n).UsedRange
                   Set c = .Find(Suchen(y), LookIn:=xlValues)
                   If Not c Is Nothing Then
                       ErsteAdresse = c.Address
                       Do
                           ReDim Preserve Adresse(x)
                           ReDim Preserve xTabelle(x)
                           xTabelle(x) = Sheets(n).Name
                           Adresse(x) = c.Address
                           Set c = .FindNext(c)
                           x = x + 1
                       Loop While Not c Is Nothing And c.Address <> ErsteAdresse
                   End If
               End With
           Next n
       Next y
    
       Application.ScreenUpdating = True
       ' Ergebnisse in ein neues Blatt schreiben
       Worksheets.Add.Name = "Suchergebnisse"
       For n = 1 To x - 1
           With ActiveSheet
               .Cells(n + 1, 1) = xTabelle(n)
               .Cells(n + 1, 2) = Adresse(n)
           End With
       Next n
    End Sub
  6. Schließe den VBA-Editor und gehe zurück zu Excel.

  7. Füge eine Schaltfläche hinzu: Gehe zu Entwicklertools > Einfügen und wähle eine Schaltfläche aus. Ziehe sie auf das Arbeitsblatt.

  8. Weise das Makro zu: Wähle im Dialogfeld das Makro Suchen_und_anzeigen aus und klicke auf OK.

Jetzt kannst Du auf die Schaltfläche klicken und nach Begriffen in allen Tabellenblättern suchen.


Häufige Fehler und Lösungen

  • Problem: Das Makro fragt nach einem Bereich.

    • Lösung: Stelle sicher, dass Du den Bereich im Code auf UsedRange setzt, damit das gesamte Arbeitsblatt durchsucht wird.
  • Problem: Keine Ergebnisse werden angezeigt.

    • Lösung: Überprüfe, ob der gesuchte Begriff tatsächlich in den Tabellenblättern vorhanden ist und ob die Groß- und Kleinschreibung korrekt ist.

Alternative Methoden

  1. Excel Suchfunktion: Du kannst die integrierte Suchfunktion von Excel verwenden, um manuell in allen Blättern nach Begriffen zu suchen. Drücke Strg + F und wähle "Alle Blätter durchsuchen".

  2. Formeln verwenden: Verwende die Formel =SVERWEIS(), um Werte in einer bestimmten Tabelle zu finden.


Praktische Beispiele

  • Wenn Du die Excel-Suchfunktion für einen Städtenamen wie "Bern" verwendest, kannst Du schnell feststellen, in welchen Blättern dieser Name vorkommt.
  • Mit dem Makro kannst Du eine Liste aller Blätter erstellen, die "Bern" enthalten, und die Zellen, in denen der Begriff gefunden wurde, auf einem separaten Blatt auflisten.

Tipps für Profis

  • Makros optimieren: Wenn Du das Makro in einer großen Arbeitsmappe verwendest, könntest Du die Suche auf bestimmte Spalten oder Zeilen einschränken, um die Leistung zu verbessern.
  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen in dein Makro ein, um unerwartete Probleme zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich das Suchfeld anpassen, um nur Ergebnisse anzuzeigen? Du kannst das Makro so anpassen, dass es die Ergebnisse nur in einem bestimmten Format oder in einer bestimmten Farbe hervorhebt.

2. Kann ich das Makro in mehreren Arbeitsmappen verwenden? Ja, Du kannst das Makro in jeder Arbeitsmappe verwenden. Stelle sicher, dass das Makro in der jeweiligen Arbeitsmappe gespeichert ist, in der Du es verwenden möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige