Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Suche über mehrere Tabellenblätter

Suche über mehrere Tabellenblätter
Katy
Hallo an alle Excel-Profis,
ich habe folgendes Problem und hoffe Ihr könnt mir da vielleicht helfen:
Gegeben ist eine Excel Datei mit mehreren Tabellenblättern, die als Datenbank fungiert.
Die Tabellenblätter haben jeweils einen Kopf von mehreren Zeilen, darunter (beginnt in jedem Blatt ab der gleichen Zeile) stehen Texte.
Spalten C und D, und Spalte E und F sind zusammengefasst und in Ihnen steht fortlaufender Text.
Ziel ist nun ein Wort über alle Tabellenblätter hinweg zu suchen und die betroffenen Zeilen in ein neues Tabellenblatt zu kopieren.
Ich habe mit Hilfe eines anderen Foreneintrags schon folgendes, dass soweit funktioniert:
Sub suche()
Dim c               As Range
Dim Suchwert        As Variant
Dim ws              As Worksheet
Dim ersterFundort   As String
Dim i               As Integer, z As Long
z = 1
Do
Suchwert = InputBox("Suchbegriff", "Suchbegriff")
Loop While Suchwert = ""
For Each ws In Sheets
If ws.Name = "Suchergebnis" Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
Sheets.Add After:=Sheets(Sheets.Count)
Set ws = ActiveSheet
ws.Name = "Suchergebnis"
ws.Cells(1, 1).Value = "Suchergebnis"
ws.Cells(1, 2).Value = "im Tab.blatt"
ws.Cells(1, 3).Value = "Zelladresse"
For i = 1 To Sheets.Count - 1
Set c = Sheets(i).Cells.Find(what:=Suchwert, lookat:=xlValue)
If Not c Is Nothing Then
Do Until c Is Nothing Or c.Address = ersterFundort
If ersterFundort = "" Then ersterFundort = c.Address
z = z + 1
With ws
.Cells(z, 3).Value = c.Address(False, False)
.Cells(z, 2).Value = Sheets(i).Name
.Hyperlinks.Add Anchor:=.Cells(z, 1), Address:="", _
SubAddress:=Sheets(i).Name & "!" & c.Address(False, False), _
TextToDisplay:=CStr(c)
End With
Set c = Sheets(i).Cells.FindNext(c)
Loop
End If
Set c = Nothing
ersterFundort = ""
Next
End Sub

Problem ist jetz das Format des Suchergebnisses. Es soll ja die gesamte betroffene Zeile von C bis F herauskopiert werden soll. Wünschenswert wäre die Quellenangabe die dieser VBA Text jetzt macht (Tabellenblatt und Zelladresse) beizubehalten.
Ich hoffe sehr, dass mir hier jemand helfen kann, da ich mich leider überhaupt nicht mit VBA auskenne.
Dankeschön schon mal!
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Suche über mehrere Tabellenblätter
14.04.2011 16:04:44
fcs
Hallo Katy,
nachfolgend die Prozedur mit Ergänzung des Kopierens der Spalten C bis F.
Ich hab's unter Excel 2007 getestet. Ich bin nicht sicher, ob die verbundenen Zellen beim Kopieren in älteren Excelversionen Kummer bereiten. Falls ja, dann muss man die Werte aus den Zellen C und E der Zeile einelnen in das Blatt Suchergebnis übertragen.
Gruß
Franz
Sub suche()
Dim c               As Range
Dim Suchwert        As Variant
Dim ws              As Worksheet
Dim ersterFundort   As String
Dim i               As Integer, z As Long
z = 1
Do
Suchwert = InputBox("Suchbegriff", "Suchbegriff")
Loop While Suchwert = ""
For Each ws In Sheets
If ws.Name = "Suchergebnis" Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
Sheets.Add After:=Sheets(Sheets.Count)
Set ws = ActiveSheet
ws.Name = "Suchergebnis"
ws.Cells(1, 1).Value = "Suchergebnis"
ws.Cells(1, 2).Value = "im Tab.blatt"
ws.Cells(1, 3).Value = "Zelladresse"
ws.Cells(1, 4).Value = "Spalte C"
ws.Cells(1, 6).Value = "Spalte E"
For i = 1 To Sheets.Count - 1
Set c = Sheets(i).Cells.Find(what:=Suchwert, lookat:=xlValue)
If Not c Is Nothing Then
Do Until c Is Nothing Or c.Address = ersterFundort
If ersterFundort = "" Then ersterFundort = c.Address
z = z + 1
With ws
.Cells(z, 3).Value = c.Address(False, False)
.Cells(z, 2).Value = Sheets(i).Name
.Hyperlinks.Add Anchor:=.Cells(z, 1), Address:="", _
SubAddress:=Sheets(i).Name & "!" & c.Address(False, False), _
TextToDisplay:=CStr(c)
'Spalten C bis D der gefundenen Zeile kopieren
With Sheets(i)
.Range(.Cells(c.Row, 3), .Cells(c.Row, 6)).Copy _
Destination:=ws.Cells(z, 4)
End With
End With
Set c = Sheets(i).Cells.FindNext(c)
Loop
End If
Set c = Nothing
ersterFundort = ""
Next
End Sub

Anzeige
AW: Suche über mehrere Tabellenblätter
18.04.2011 08:32:20
Katy
Hallo Franz,
hab es gerade ausprobiert: Es funktioniert 1A!! Vielen, vielen Danke dafür!
;

Forumthreads zu verwandten Themen

Anzeige
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

Suche über mehrere Tabellenblätter in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und lade deine Datei mit mehreren Tabellenblättern.

  2. Öffne den VBA-Editor mit ALT + F11.

  3. Füge ein neues Modul hinzu:

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

    Sub suche()
       Dim c               As Range
       Dim Suchwert        As Variant
       Dim ws              As Worksheet
       Dim ersterFundort   As String
       Dim i               As Integer, z As Long
       z = 1
       Do
           Suchwert = InputBox("Suchbegriff", "Suchbegriff")
       Loop While Suchwert = ""
       For Each ws In Sheets
           If ws.Name = "Suchergebnis" Then
               Application.DisplayAlerts = False
               ws.Delete
               Application.DisplayAlerts = True
           End If
       Next
       Sheets.Add After:=Sheets(Sheets.Count)
       Set ws = ActiveSheet
       ws.Name = "Suchergebnis"
       ws.Cells(1, 1).Value = "Suchergebnis"
       ws.Cells(1, 2).Value = "im Tab.blatt"
       ws.Cells(1, 3).Value = "Zelladresse"
       ws.Cells(1, 4).Value = "Spalte C"
       ws.Cells(1, 6).Value = "Spalte E"
       For i = 1 To Sheets.Count - 1
           Set c = Sheets(i).Cells.Find(what:=Suchwert, lookat:=xlValue)
           If Not c Is Nothing Then
               Do Until c Is Nothing Or c.Address = ersterFundort
                   If ersterFundort = "" Then ersterFundort = c.Address
                   z = z + 1
                   With ws
                       .Cells(z, 3).Value = c.Address(False, False)
                       .Cells(z, 2).Value = Sheets(i).Name
                       .Hyperlinks.Add Anchor:=.Cells(z, 1), Address:="", _
                       SubAddress:=Sheets(i).Name & "!" & c.Address(False, False), _
                       TextToDisplay:=CStr(c)
                       'Spalten C bis D der gefundenen Zeile kopieren
                       With Sheets(i)
                           .Range(.Cells(c.Row, 3), .Cells(c.Row, 6)).Copy _
                           Destination:=ws.Cells(z, 4)
                       End With
                   End With
                   Set c = Sheets(i).Cells.FindNext(c)
               Loop
           End If
           Set c = Nothing
           ersterFundort = ""
       Next
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus, indem du ALT + F8 drückst, das Makro wählst und auf Ausführen klickst.

  7. Gib den Suchbegriff ein, nach dem du in allen Tabellenblättern suchen möchtest.


Häufige Fehler und Lösungen

  • Fehler: Makro funktioniert nicht

    • Stelle sicher, dass das VBA-Makro in einer nicht geschützten Arbeitsmappe ausgeführt wird.
  • Fehler: Die Suchergebnisse sind nicht vollständig

    • Überprüfe, ob der Suchbegriff genau übereinstimmt. Achte auf Groß- und Kleinschreibung.
  • Fehler: Excel stürzt ab

    • Versuche, die Arbeitsmappe zu speichern und Excel neu zu starten, bevor du das Makro erneut ausführst.

Alternative Methoden

  • Excel Suchfunktion verwenden: Du kannst die integrierte Suchfunktion Strg + F nutzen, um in einem einzelnen Blatt zu suchen.
  • Power Query: Wenn du Excel 2016 oder neuer verwendest, kannst du Power Query verwenden, um Daten aus mehreren Tabellenblättern zu kombinieren und zu durchsuchen.

Praktische Beispiele

  1. Beispiel 1: Suche nach dem Begriff "Umsatz" in einer Datei mit Blättern für verschiedene Monate.
  2. Beispiel 2: Suche nach spezifischen Produkten in einer Produktdatenbank, die auf mehrere Blätter verteilt ist.

In beiden Fällen kannst du den obigen VBA-Code nutzen, um die gewünschten Daten schnell zu finden und in ein Ergebnisblatt zu übertragen.


Tipps für Profis

  • Verwende benannte Bereiche: Dies erleichtert die Suche in Excel und macht den Code übersichtlicher.
  • Optimiere die Suchfunktion: Du kannst lookat:=xlPart verwenden, um Teilsuchbegriffe zu finden.
  • Automatisiere die Ausführung: Verknüpfe das Makro mit einem Button auf deinem Arbeitsblatt, um die Ausführung zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich die Suchfunktion in Excel anpassen?
Du kannst die Parameter im VBA-Code ändern, um die Suche nach deinen Bedürfnissen anzupassen.

2. Funktioniert dieser Ansatz in Excel Online?
Nein, VBA ist nur in Desktop-Versionen von Excel verfügbar, nicht in Excel Online.

3. Kann ich das Suchergebnis in eine andere Datei exportieren?
Ja, du kannst den Code anpassen, um das Ergebnis in eine andere Excel-Datei zu kopieren.

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