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

Excel: Arbeitsmappe durchsuchen

Forumthread: Excel: Arbeitsmappe durchsuchen

Excel: Arbeitsmappe durchsuchen
22.07.2014 11:38:46
netu
Hallo Gemeinde,
ich stehe vor einen Problem, und da ich nur Basiskenntnisse in Excel besitze komme ich nicht wirklich weiter.
Folgendes Szenario
Ich habe eine Excel Arbeitsmappe mit immer steigenden Anzahl an Tabellen (zur Zeit 24),diese Tabellen sind alle mit Informationen gefüllt. Ich will diese Tabellen alle durchsuchen und den Inhalt wonach ich gesucht haben ausgeben, auf einer extra Tabelle.
Wie könnte man das machen?

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel: Arbeitsmappe durchsuchen
22.07.2014 13:24:09
fcs
Hallo netu,
dein Problem kann man eigentlich nur per Makro lösen. Ich hab aber noch einige Fragen:
1. Wie willst du Suchen?
- Gesamten Zellinhalt vergleichen (Zellinhalt = Suchbegriff) oder Zelle enthält Suchbegriff
- Groß-/Kleinschreibung beachten?
2. Wie soll der Suchbegriff an das Makro übergeben werden?
Inhalt einer bestimmten Zelle oder Eingabe-Box die das Makro einblendet?
3. Was soll in die extra Tabelle ausgegeben werden?
Jede Tabellenzeile, in der der Suchbegriff gefunden wurde?
4. Wo befindet sich die extra Tabelle für die Ausgabe?
Innerhalb der gleichen Arbeitsmappe?
Oder soll jeweils eine neue Arbeitsmappe/Datei angelegt werden?
5. Soll der Suchbegriff in allen Zellen der Tabelle gesucht werden oder in bestimmten Spalten?
Gruß
Franz

Anzeige
AW: Excel: Arbeitsmappe durchsuchen
22.07.2014 14:27:40
netu
Hallo Franz,
danke für deine Antwort
1 Ich will ein Wort eingeben und es soll mir die gesamte Zeile ausgegeben werden Groß-/Kleinschreibung ist egal
2 Ich hatte das ganz gerne mit einer Box
3 In der Extra Tabelle sollen die Ergebnisse Zeileninhalt
4 Die Extra Tabelle ist in der gleichen Arbeitsmappe
5 Alle Zellen
Gruß
Netu

Anzeige
Excel: Arbeitsmappe durchsuchen - Ergebnisliste
22.07.2014 15:39:55
fcs
Hallo Netu,
hier der Code eines entsprechenden Makros, den du im VBA-Editor in einem allgemeinen Modul einfügen musst. Die Werte der von mir kommentierten Variablen musst du noch an deine Bedürfnisse anpassen.
Gruß
Franz
'Makro in einem allgemeinen Modul
Option Explicit
Private varFind As Variant
Sub Suche_in_Mappe()
Dim wksErgebnis As Worksheet, ZeileErgebnis As Long
Dim strErgebnis As String, ZeileTitelErgebnis As Long
Dim bolValueFormatOnly As Boolean, bolGefunden As Boolean, _
bolLoeschenAlt As Boolean
Dim wks As Worksheet, rngSuchbereich As Range
Dim rngFind As Range, lngFind As Long, str1stAdr As String
strErgebnis = "Suchergebnis" 'Name des Tabellenblatts in das Ergebnisse _
kopiert werden - ggf. anpassen
ZeileTitelErgebnis = 1 'Zeile unterhalb der die Ergebnisse eingefügt werden _
sollen - ggf. anpassen
bolValueFormatOnly = False 'auf True ändern, wenn nur Formate und Werte _
kopiert werden sollen
bolLoeschenAlt = True 'auf False ändern, wenn Werte der vorherigen Suche _
nicht gelöscht werden sollen
'Suchbegriff eingeben
varFind = InputBox("Suchbegriff (keinen Leertext suchen!)" & vbLf _
& "Platzhalterzeichen Sternchen (*) oder Fragezeichen (?) " _
& "können im Suchbegriff verwendet werden", _
"Suche in Arbeitsmappe", Default:=varFind)
If varFind = "" Then Exit Sub
'Ergebnisblatt vorbereiten
Set wksErgebnis = ActiveWorkbook.Worksheets(strErgebnis)
With wksErgebnis
'letzte benutzte Zeile im Ergebnisnblatt ermitteln
Set rngFind = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlFormulas, _
lookat:=xlWhole, Searchorder:=xlByRows, searchdirection:=xlPrevious)
If rngFind Is Nothing Then
ZeileErgebnis = 0
Else
ZeileErgebnis = rngFind.Row
End If
If bolLoeschenAlt = True Then
If ZeileErgebnis > ZeileTitelErgebnis Then
'Zeilen mit Altdaten löschen
.Range(.Rows(ZeileTitelErgebnis + 1), .Rows(ZeileErgebnis)).Clear
End If
ZeileErgebnis = ZeileTitelErgebnis
End If
End With
'Tabellenblätter abarbeiten
For Each wks In ActiveWorkbook.Worksheets
Select Case wks.Name
Case strErgebnis, "Tabelle XYZ" 'Tabellenname(n) ggf. anpassen/ergänzen
'in diesen Tabellenblättern nicht suchen
Case Else
With wks
'Variablen zurücksetzen
Set rngFind = Nothing
str1stAdr = ""
lngFind = 0
'zu durchsuchender Zellbereich
Set rngSuchbereich = .Cells
'Suchbegriff suchen
Set rngFind = rngSuchbereich.Find(What:=varFind, LookIn:=xlValues, _
lookat:=xlWhole, Searchorder:=xlByRows, MatchCase:=False)
If rngFind Is Nothing Then
'Suchbegriff im Blatt nicht vorhanden
Else
'Zelladresse der 1. Fundstelle merken
str1stAdr = rngFind.Address
Do
bolGefunden = True
'Zeile der gefundenen Zelle prüfen
Select Case rngFind.Row
Case 1, lngFind
'Suchbegriff in Zeile 1 oder mehrfach in Zeile
'Case-Werte ggf. anpassen
Case Else
'Zeile der gefundenen Zelle merken
lngFind = rngFind.Row
'Zähler für Zielzeile erhöhen
ZeileErgebnis = ZeileErgebnis + 1
If bolValueFormatOnly = True Then
'Zeile mit Fundstelle kopieren - nur Werte und Formate
.Rows(lngFind).Copy
wksErgebnis.Rows(ZeileErgebnis).PasteSpecial Paste:=xlPasteFormats
wksErgebnis.Rows(ZeileErgebnis).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Else
'Zeile mit Fundstelle kopieren - ggf. inkl. Formeln etc.
.Rows(lngFind).Copy wksErgebnis.Rows(ZeileErgebnis)
End If
End Select
'Nächste Fundstelle suchen
Set rngFind = rngSuchbereich.FindNext(After:=rngFind)
Loop Until rngFind.Address = str1stAdr
End If
End With
End Select
Next
If bolGefunden = False Then
MsgBox "Keine Treffer für Suchbegriff """ & varFind & """ gefunden", _
vbOKOnly, "Suche in Arbeitsmappe"
Else
wksErgebnis.Activate
End If
End Sub

Anzeige
AW: Excel: Arbeitsmappe durchsuchen - Ergebnisliste
23.07.2014 00:13:41
Adis
Hallo
anbei eine kleine Beispieldatei zum Arbeitsmappe durchsuchen
mein Programm kann mit den echten Excel Profis nicht mithalten
Ich habe ein Makro von Franz gesehen wo ich nicht durchblicke.
Vielleicht sin die einfachen alten Versionen trotzem brauchbar
Meine erste Versionen war für eine andere Anfrage, ohne Optionen
und Suche in externen Mappen. Die Erweiterung finde ich praxisnahe.
Es gibt noch weitere Überlegungen, dafür brauche ich noch mehr Zeit
Würde mich freuen eine Rückmeldung zu bekommen
https://www.herber.de/bbs/user/91650.xls
Gruss Adis

Anzeige
AW: Excel: Arbeitsmappe durchsuchen - Ergebnisliste
23.07.2014 02:35:31
fcs
Hallo Adis,
ich hab mal deine Datei runtergeladen und versucht in Excel 2010 zu öffnen. Ich erhalte die folgende tolle Meldung und die Datei wird ohne VBA-Projekt geöffnet und alle Makro-Funktionen sind tot.
Userbild
Was hast du denn besonderes an Komponenten/Steuerelementen in deiner Datei verwendet, dass eine neuere Excel-Version so "allergisch" auf deine Datei reagieren kann?
Ich hab mich jetzt noch nicht auf die Suche nach dem in der Meldung zitierten VBA-Konverter gemacht, aber irgendwie hört sich das nicht gut an.
Gruß
Franz

Anzeige
AW: Excel: Arbeitsmappe durchsuchen - Ergebnisliste
23.07.2014 08:16:09
netu
Hallo Franz,
vielen dank für den Code das funktioniert Super!!! Ich frage mich geht das so einfach ich habe in der Zeit nur eine Suchfunktion geschafft zu machen :(
Aber ich habe noch eine Frage
- eine Tabelle hat z.B. Oben ein Titel da steht dann RX100 und da drunter sind alle Geräte die zu RX100 gehören usw. kann mann das auch ausgeben lassen wenn ich danach suche?
@Adis
Hallo danke für deine Tabelle aber die Funktioniert bei mir auch nicht.
Gruss
Netu

Anzeige
AW: Excel: Arbeitsmappe durchsuchen - Ergebnisliste
23.07.2014 10:12:22
fcs
Hallo Netu,
die meisten Aktionen, die man in Excel manuell ausführen kann, können auch per Makro ausgeführt werden.
Die Schwierigkeit besteht dann meistens darin, den für die Programmierung guten/optimalen Ansatz zu finden.
Ich hab das Makro für die Suche in der Arbeitsmappe mal so zusammengekürt und angepasst, dass die Suche in der Zeile eines Blattes erfolgt und die unter der Fundstelle stehenden Daten in eine Zielzelle kopiert werden.
Gruß
Franz
Sub SucheGeraete()
Dim wksErgebnis As Worksheet
Dim strErgebnis As String, rngZiel As Range, varFind
Dim bolValueFormatOnly As Boolean
Dim wks As Worksheet, rngSuchbereich As Range
Dim rngFind As Range, Zeile_L As Long
strErgebnis = "Suchergebnis" 'Name des Tabellenblatts in das Ergebnisse _
kopiert werden - ggf. anpassen
bolValueFormatOnly = False 'auf True ändern, wenn nur Formate und Werte _
kopiert werden sollen
'Suchbegriff eingeben
varFind = InputBox("Suchbegriff", _
"Suche Geräte zu Suchbegriff in Titelzeile")
If varFind = "" Then Exit Sub
'Ergebnisblatt vorbereiten
Set wksErgebnis = ActiveWorkbook.Worksheets(strErgebnis)
With wksErgebnis
.Range("A2").Value = varFind 'Suchbegriff im Zielblatt eintragen
Set rngZiel = .Range("B2") '1. Zelle in die Ergebnis-Zellen kopiert werden sollen
'letzte benutzte Zelle unterhalb Einfügezelle
Set rngFind = .Cells(.Rows.Count, rngZiel.Column).End(xlUp)
If rngFind.Row >= rngZiel.Row Then
'Altdaten löschen
.Range(rngZiel, rngFind).Clear
End If
End With
Set wks = Worksheets("Tabelle2") ' ActiveSheet 'Tabellenblatt mit den zu suchenden Daten
With wks
'zu durchsuchender Zellbereich
Set rngSuchbereich = .Rows(1)       'Zeilennummer ggf anpassen
'Suchbegriff suchen
Set rngFind = rngSuchbereich.Find(What:=varFind, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False)
If rngFind Is Nothing Then
'Suchbegriff in Titelzeile des Blattes nicht vorhanden
MsgBox "Kein Treffer für Suchbegriff """ & varFind & """ gefunden", _
vbOKOnly, "Suche in Maschine in Titelzeile"
Else
'letzte Zeile in gefundener Spalte
Zeile_L = .Cells(.Rows.Count, rngFind.Column).End(xlUp).Row
If Zeile_L = rngFind.Row Then
MsgBox "Es gibt keine Geräte zu Maschine """ & varFind & """"
Else
If bolValueFormatOnly = True Then
'Daten unterhalb Fundstelle kopieren - nur Werte und Formate
.Range(rngFind.Offset(1, 0), .Cells(Zeile_L, rngFind.Column)).Copy
rngZiel.PasteSpecial Paste:=xlPasteFormats
rngZiel.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Else
'Zeile mit Fundstelle kopieren - ggf. inkl. Formeln etc.
.Range(rngFind.Offset(1, 0), .Cells(Zeile_L, rngFind.Column)).Copy rngZiel
End If
End If
wksErgebnis.Activate
End If
End With
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Excel Arbeitsmappe durchsuchen: Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

Um eine Excel Arbeitsmappe zu durchsuchen, benötigst du ein Makro. Hier sind die Schritte, wie du vorgehen kannst:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:

    'Makro in einem allgemeinen Modul
    Option Explicit
    Private varFind As Variant
    Sub Suche_in_Mappe()
       Dim wksErgebnis As Worksheet, ZeileErgebnis As Long
       Dim strErgebnis As String, ZeileTitelErgebnis As Long
       Dim bolValueFormatOnly As Boolean, bolGefunden As Boolean, _
       bolLoeschenAlt As Boolean
       Dim wks As Worksheet, rngSuchbereich As Range
       Dim rngFind As Range, lngFind As Long, str1stAdr As String
       strErgebnis = "Suchergebnis" 'Name des Tabellenblatts in das Ergebnisse kopiert werden
       ZeileTitelErgebnis = 1 'Zeile unterhalb der die Ergebnisse eingefügt werden sollen
       bolValueFormatOnly = False 'auf True ändern, wenn nur Formate und Werte kopiert werden sollen
       bolLoeschenAlt = True 'auf False ändern, wenn Werte der vorherigen Suche nicht gelöscht werden sollen
    
       'Suchbegriff eingeben
       varFind = InputBox("Suchbegriff (keinen Leertext suchen!)" & vbLf & "Platzhalterzeichen Sternchen (*) oder Fragezeichen (?) " & "können im Suchbegriff verwendet werden", "Suche in Arbeitsmappe", Default:=varFind)
       If varFind = "" Then Exit Sub
    
       'Ergebnisblatt vorbereiten
       Set wksErgebnis = ActiveWorkbook.Worksheets(strErgebnis)
       With wksErgebnis
           'letzte benutzte Zeile im Ergebnisblatt ermitteln
           Set rngFind = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlFormulas, _
           lookat:=xlWhole, Searchorder:=xlByRows, searchdirection:=xlPrevious)
           If rngFind Is Nothing Then
               ZeileErgebnis = 0
           Else
               ZeileErgebnis = rngFind.Row
           End If
           If bolLoeschenAlt = True Then
               If ZeileErgebnis > ZeileTitelErgebnis Then
                   'Zeilen mit Altdaten löschen
                   .Range(.Rows(ZeileTitelErgebnis + 1), .Rows(ZeileErgebnis)).Clear
               End If
               ZeileErgebnis = ZeileTitelErgebnis
           End If
       End With
    
       'Tabellenblätter abarbeiten
       For Each wks In ActiveWorkbook.Worksheets
           Select Case wks.Name
           Case strErgebnis 'In diesem Tabellenblatt nicht suchen
           Case Else
               With wks
                   'Variablen zurücksetzen
                   Set rngFind = Nothing
                   str1stAdr = ""
                   lngFind = 0
                   'zu durchsuchender Zellbereich
                   Set rngSuchbereich = .Cells
                   'Suchbegriff suchen
                   Set rngFind = rngSuchbereich.Find(What:=varFind, LookIn:=xlValues, _
                   lookat:=xlWhole, Searchorder:=xlByRows, MatchCase:=False)
                   If rngFind Is Nothing Then
                       'Suchbegriff im Blatt nicht vorhanden
                   Else
                       'Zelladresse der 1. Fundstelle merken
                       str1stAdr = rngFind.Address
                       Do
                           bolGefunden = True
                           'Zeile der gefundenen Zelle prüfen
                           If rngFind.Row <> lngFind Then
                               'Zeile der gefundenen Zelle merken
                               lngFind = rngFind.Row
                               'Zähler für Zielzeile erhöhen
                               ZeileErgebnis = ZeileErgebnis + 1
                               'Zeile mit Fundstelle kopieren
                               .Rows(lngFind).Copy wksErgebnis.Rows(ZeileErgebnis)
                           End If
                           'Nächste Fundstelle suchen
                           Set rngFind = rngSuchbereich.FindNext(After:=rngFind)
                       Loop Until rngFind.Address = str1stAdr
                   End If
               End With
           End Select
       Next
       If bolGefunden = False Then
           MsgBox "Keine Treffer für Suchbegriff """ & varFind & """ gefunden", vbOKOnly, "Suche in Arbeitsmappe"
       Else
           wksErgebnis.Activate
       End If
    End Sub
  4. Speichere das Makro und schließe den VBA-Editor.

  5. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle Suche_in_Mappe und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Keine Treffer gefunden"
    Lösung: Überprüfe, ob du den richtigen Suchbegriff eingegeben hast und ob der Suchbegriff in den Tabellenblättern vorhanden ist.

  • Fehler: Makro wird nicht ausgeführt
    Lösung: Stelle sicher, dass Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Sicherheitscenter > Einstellungen für das Sicherheitscenter und aktiviere Makros.


Alternative Methoden

Wenn du keine Makros verwenden möchtest, kannst du die Excel-Suchfunktion nutzen:

  1. Drücke CTRL + F.
  2. Gib den Suchbegriff ein.
  3. Klicke auf Alle suchen, um alle Vorkommen in der gesamten Arbeitsmappe anzuzeigen.

Praktische Beispiele

Angenommen, du suchst nach dem Begriff "RX100". Mit dem oben genannten Makro wird jede Zeile, die diesen Begriff enthält, in das Blatt "Suchergebnis" kopiert. So kannst du schnell alle relevanten Informationen aus deiner Excel Arbeitsmappe durchsuchen.


Tipps für Profis

  • Nutze Platzhalter wie * oder ? in deinem Suchbegriff, um flexiblere Suchabfragen durchzuführen.
  • Passe den Code an, um nur in bestimmten Spalten oder Zeilen zu suchen, je nach deinen Anforderungen.

FAQ: Häufige Fragen

1. Frage
Wie kann ich das Makro anpassen, um nur bestimmte Tabellen zu durchsuchen?
Antwort: Du kannst die Select Case-Anweisung im Code anpassen, um spezifische Tabellennamen auszuschließen.

2. Frage
Kann ich das Makro in älteren Excel-Versionen verwenden?
Antwort: Ja, der bereitgestellte Code sollte in den meisten Excel-Versionen ab 2007 funktionieren, solange Makros unterstützt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige