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

Forumthread: Alle Tabellenblätter durchsuchen

Alle Tabellenblätter durchsuchen
23.10.2006 13:29:55
Mike
Hallo Ihr lieben im Forum.
Ich habe vor Kurzem aus dem Archiv von (Ralf anton - Geschrieben am: 27.06.2006 11:32:45)
folgenden VBA Code ausprobiert. Der Funktioniert auch super. Danke!

Sub Durchlauf()
Dim x As Byte, zelle, Bereich$, Zeile#, ende$
Zeile = 1
For x = 1 To Sheets.Count
If Not Sheets(x).Name = "Sammelblatt" Then
ende = Sheets(x).Range("A1").SpecialCells(xlLastCell).Address
Bereich = "A1:" & ende
For Each zelle In Sheets(x).Range(Bereich)
If zelle = "Zuschlag" Then
Sheets("Sammelblatt").Range("A" & Zeile) = zelle.Offset(0, 1)
Zeile = Zeile + 1
End If
Next
End If
Next x
End Sub

Jedoch möchte ich, dass er mir die Daten nicht von oben nach unten, sondern von rechts nach links schreibt.
Nach nun mehreren Tagen suche komme ich leider nicht weiter. Es wäre nett, wenn mir hierbei jemand helfen könnte.
Danke, Gruß, Mike
PS: Ich nutze seit einigen Monaten Euer Archiv. Ich muss sagen, Ihr habt oft tolle beispiele, von denen ich schon einige umsetzen konnte.
Dafür vielen Dank!
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Tabellenblätter durchsuchen
23.10.2006 14:16:14
fcs
Hallo Mike,
hier ungetest die Anpassung, die von Rechts nach Links die Treffer einsammelt.
Gruß
Franz

Sub Durchlauf()
Dim x As Byte, zelle, Bereich$, Spalte#, SpalteR#, Zeile#, ende$
Zeile = 1
SpalteR = 255 'rechte Spalte in der begonnen werden soll
Spalte = SpalteR
For x = 1 To Sheets.Count
If Not Sheets(x).Name = "Sammelblatt" Then
ende = Sheets(x).Range("A1").SpecialCells(xlLastCell).Address
Bereich = "A1:" & ende
For Each zelle In Sheets(x).Range(Bereich)
If zelle = "Zuschlag" Then
Sheets("Sammelblatt").Cells(Zeile, Spalte) = zelle.Offset(0, 1)
If Spalte = 1 Then
Zeile = Zeile + 1
Spalte = SpalteR
Else
Spalte = Spalte - 1
End If
End If
Next
End If
Next x
End Sub

Anzeige
AW: Alle Tabellenblätter durchsuchen
Mike
Hi Franz.
Vielen Dank für die schnelle Hilfe. Fluppt nach einigen Anpassungen super!
Habe nur ( Spalte = Spalte – 1 in + 1 ) geändert, damit er mir die Daten
von links nach rechts schreibt.
Habe festgestellt dass ich mich in meiner Beschreibung vertan habe.
Gruß, Mike
AW: Alle Tabellenblätter durchsuchen
23.10.2006 15:49:12
Mike
Hi Franz
Hab da noch ne Frage?
Ist es möglich anstelle eines Bezuges, der in das Sammelblatt Kopiert wird,
vielleicht den jeweiligen Tabellennamen in das Sammelblatt zu Kopieren?
Gruß, Mike
Anzeige
AW: Alle Tabellenblätter durchsuchen
23.10.2006 16:28:18
fcs
Hi Mike,
den Tabellennamen kannst du innerhalb der For x = 1 to .... -Next x -Schleife z.B. mit

Sheets(x).Name

ermitteln. Diesen Wert muß du dann in die gewünschte Zelle eintragen. Beispiel:

Sub Durchlauf()
Dim x As Byte, zelle, Bereich$, Spalte#, SpalteR#, Zeile#, ende$
Zeile = 1
SpalteR = 255 'rechte Spalte ab der neue Zeile begonnen werden soll
Spalte = SpalteR
For x = 1 To Sheets.Count
If Not Sheets(x).Name = "Sammelblatt" Then
ende = Sheets(x).Range("A1").SpecialCells(xlLastCell).Address
Bereich = "A1:" & ende
For Each zelle In Sheets(x).Range(Bereich)
If zelle = "Zuschlag" Then
Sheets("Sammelblatt").Cells(Zeile, Spalte) = Sheets(x).Name
Sheets("Sammelblatt").Cells(Zeile+1, Spalte) = zelle.Offset(0, 1)
If Spalte = SpalteR Then
Zeile = Zeile + 2
Spalte = 1
Else
Spalte = Spalte + 1
End If
End If
Next
End If
Next x
End Sub

Anzeige
AW: Alle Tabellenblätter durchsuchen
23.10.2006 17:05:53
Mike
Jau... das wars! Und wieder ein Stück weiter.
Vielen Dank!
Gruß, Mike
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Alle Tabellenblätter in Excel durchsuchen


Schritt-für-Schritt-Anleitung

Um alle Tabellenblätter in Excel zu durchsuchen, kannst Du einen VBA-Code verwenden. Hier ist eine einfache Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden Code in das Modul:

    Sub Durchlauf()
       Dim x As Byte, zelle, Bereich$, Spalte#, SpalteR#, Zeile#, ende$
       Zeile = 1
       SpalteR = 255 ' Rechte Spalte in der begonnen werden soll
       Spalte = SpalteR
       For x = 1 To Sheets.Count
           If Not Sheets(x).Name = "Sammelblatt" Then
               ende = Sheets(x).Range("A1").SpecialCells(xlLastCell).Address
               Bereich = "A1:" & ende
               For Each zelle In Sheets(x).Range(Bereich)
                   If zelle = "Zuschlag" Then
                       Sheets("Sammelblatt").Cells(Zeile, Spalte) = zelle.Offset(0, 1)
                       If Spalte = 1 Then
                           Zeile = Zeile + 1
                           Spalte = SpalteR
                       Else
                           Spalte = Spalte - 1
                       End If
                   End If
               Next
           End If
       Next x
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro durch Drücken von ALT + F8, wähle Durchlauf und klicke auf Ausführen.

Dieser Code durchsucht alle Tabellenblätter in Deiner Arbeitsmappe und kopiert die Ergebnisse ins "Sammelblatt".


Häufige Fehler und Lösungen

  • Fehler: "Sammelblatt" nicht gefunden
    Stelle sicher, dass ein Blatt mit dem Namen "Sammelblatt" existiert. Andernfalls wird der Code nicht funktionieren.

  • Fehler: Ungültige Zellbezüge
    Überprüfe, ob die Zelle "A1" in den Blättern Daten enthält. Wenn nicht, wird der Code möglicherweise einen Fehler ausgeben.

  • Daten werden nicht korrekt kopiert
    Achte darauf, dass die gesuchte Bedingung (z.B. "Zuschlag") in den Daten vorhanden ist. Andernfalls wird nichts kopiert.


Alternative Methoden

Wenn Du keine VBA-Lösungen verwenden möchtest, kannst Du die integrierte Excel-Suchfunktion nutzen:

  1. Drücke STRG + F, um das Suchfenster zu öffnen.
  2. Klicke auf Optionen.
  3. Setze den Suchbereich auf "Arbeitsmappe", um alle Tabellenblätter zu durchsuchen.
  4. Gib den Suchbegriff ein und klicke auf Weitersuchen.

Diese Methode ist jedoch weniger flexibel als das Durchsuchen mit einem VBA-Skript.


Praktische Beispiele

Hier sind einige Beispiele, wie Du den VBA-Code anpassen kannst:

  1. Tabellennamen kopieren
    Um den Namen des aktuellen Tabellenblattes mit zu kopieren, kannst Du den Code wie folgt anpassen:

    Sheets("Sammelblatt").Cells(Zeile, Spalte) = Sheets(x).Name

    Dies ermöglicht es Dir, neben dem gefundenen Wert auch den Namen des Blattes einzufügen.

  2. Suche nach anderen Werten
    Du kannst die Bedingung If zelle = "Zuschlag" anpassen, um nach anderen Begriffen zu suchen.


Tipps für Profis

  • Makros speichern: Speichere Deine Excel-Datei als Makro-fähige Arbeitsmappe (*.xlsm), um den VBA-Code zu behalten.
  • Fehlerbehandlung einbauen: Implementiere On Error Resume Next am Anfang Deines Codes, um Fehler bei der Ausführung zu ignorieren.
  • Optimierung: Wenn Du oft nach bestimmten Werten suchst, kannst Du den Code optimieren, um die Performance zu steigern.

FAQ: Häufige Fragen

1. Kann ich diesen Code in Excel 365 verwenden?
Ja, der VBA-Code funktioniert in Excel 365 sowie in anderen Versionen wie Excel 2016 oder 2019.

2. Wie kann ich den Code anpassen, um mehrere Suchbegriffe zu verwenden?
Du kannst zusätzliche If-Bedingungen einfügen, um mehrere Begriffe zu überprüfen. Beispiel:

If zelle = "Zuschlag" Or zelle = "Rabatt" Then

3. Was ist, wenn ich die Daten nicht ins "Sammelblatt", sondern in ein anderes Blatt kopieren möchte?
Ändere einfach den Namen "Sammelblatt" im Code zu dem Namen des gewünschten Blattes.

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