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

Forumthread: Tabellenblätter durchsuchen mittels vba

Tabellenblätter durchsuchen mittels vba
09.07.2018 10:39:57
lena
Hallo,
ich brauche ein Makro das alle tabellenblätter unabhängig vom Namen (damit immer wieder welche hinzugefügt werden können ohne das das Makro verändert werden muss) durchgeht und wenn in einer Bestimmten Zelle ein wert steht einen zähler im Makro um 1 erhöht.
DIeser Zähler soll in dann in einer Bestimmten Zelle ausgegeben werden.
Ich hänge bei der Schleifenprogrammierung.
Kann mir jemand weiterhelfen?
Vielen Dank im voraus!
Lena
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 10:47:44
KlaWet
Hallo Lena,
versuche es mit einer For Each-Schleife
DIM ws as Worksheet
For each ws in ThisWorkbook.Worksheets
' Deine Prozedur
Next ws

AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 10:58:55
lena
Hallo KlaWet.
Das ich eine Schleife brauche ist mir klar.
Nur ich schaffe es nicht das die genau das macht was ich will.
z.B. Wie gehe ich bei der schleife von einem Blatt zum nächsten ohne einen Namen zu verwenden?
Anzeige
AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 11:04:34
KlaWet
Hm, aber genau das mach die Schleife, die ich dir geschrieben haben.
Diese Schleife geht ein Blatt nach dem anderen durch, egal wie es benannt wurde.
Gruß
AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 11:13:01
lena
Es soll aber erst ab dem zweiten Zählen.
Mein Makro sieht derweil so aus:
Dim Datei As Workbook
Set Datei = ThisWorkbook
Dim DS1 As Worksheet
Set DS1 = Datei.Worksheets("Auswertung")
Dim A As String
Dim Anzahl As Integer
Dim Zahl As Integer
Zahl = ActiveWorkbook.Worksheets.Count
Anzahl = Zahl - 1
DS1.Range("F5") = Anzahl
Dim counter As Long
Dim Wert As Integer
Wert = 0
With Datei
For counter = DS1.Index + 1 To Zahl
If Worksheet.Range("F13") > 0 Then Wert 1
End If
End With
DS1.Range("F13") = Wert
End Sub
In dieser Zeile "If Worksheet.Range("F13") > 0 Then Wert 1" löscht es das plus vor der eins  _
immer wieder heraus.
und es soll diese if schleife immer bei jedem Blatt wiederholen und immer eins dazu zählen.  _
wenn alle durch sind soll es den wert in -DS1.Range("F13") ausgeben.
Tut mir Leid, war vorhin dumm formuliert von mir!

Anzeige
AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 11:21:13
Daniel
Hi
ändere die Zeile mal so ab:
If Worksheets(Counter).Range("F13") > 0 Then Wert = Wert + 1
Gruß Daniel
AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 11:27:27
KlaWet
So müssts gehen...
Dim Datei As Workbook
Set Datei = ThisWorkbook
Dim DS1 As Worksheet
Set DS1 = Datei.Worksheets("Auswertung")
Dim A As String
Dim Anzahl As Integer
Dim Zahl As Integer
Zahl = ActiveWorkbook.Worksheets.Count
Anzahl = Zahl - 1
DS1.Range("F5") = Anzahl
Dim counter As Long
Dim Wert As Integer
Dim ws As Worksheet
Wert = 0
For Each ws In ThisWorkbook.Worksheets
If ws.Name  "Auswertung" Then 'ich vermute, dass dieses Blatt ncht gezählt werden soll.
If ws.Range("F13") > 0 Then
Wert = Wert + 1
End If
End If
Next ws
DS1.Range("F13") = Wert
End Sub

Anzeige
AW: Tabellenblätter durchsuchen mittels vba
09.07.2018 11:30:12
lena
Danke!
...Sorry...
09.07.2018 11:15:28
KlaWet
... das wichtigste natürlich vergessen :-)
Dim ws as Worksheet
Dim intCounter as Integer
For each ws in Thisworkbook.Worksheets
If ws.Range("A1").value = 1 then 'musst du dann anpassen
intCounter = intCounter + 1
End if
Next ws
Zum Schluss schreibst du dann den Inhalt von intCounter in eine beliebige Ergebniszelle
Anzeige
AW: ...Sorry...
09.07.2018 11:29:46
lena
Super Danke!
Nur Leider nimmts da mein erstes Worksheet auch mit rein. Das is allerdings die Auswertung die es nicht mitnehmen soll. wie kann ich das noch einbauen?
AW: ...Sorry...
09.07.2018 11:37:26
lena
Habs geschafft! VIELEN VIELEN DANK!!
AW: ...Sorry...
09.07.2018 11:38:08
Daniel
Hi
mit ner zusätzlichen abfrage entweder per IF THEN:

if ws.Name  "Auswertung" then
if ws.Range("A1").Value = 1 then intcounter = Intcounter + 1
end if
oder mit SELECT CASE, wobei SELECT CASE dann anzuwenden wäre, wenn mehrere Blätter von dieser Auswertung ausgenommen werden sollen:
Select Case ws.Name
Case "Auswertung" '-- hier die Blätter auflisten die nicht berücksichtigt werden sollen
Case else
if ws.Range("A1").Value = 1 then intCounter = intCounter + 1
end select
Gruß Daniel
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblätter in Excel mit VBA durchsuchen


Schritt-für-Schritt-Anleitung

Um alle Tabellenblätter in einer Excel-Arbeitsmappe mit VBA zu durchsuchen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne den VBA-Editor:

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

    • Rechtsklicke auf „VBAProject (DeineDatei.xlsx)“ > „Einfügen“ > „Modul“.
  3. Füge den folgenden Code ein:

    Sub AlleTabellenblätterDurchsuchen()
       Dim ws As Worksheet
       Dim intCounter As Integer
       Dim Wert As Integer
    
       Wert = 0 ' Zähler zurücksetzen
    
       For Each ws In ThisWorkbook.Worksheets
           If ws.Name <> "Auswertung" Then ' Auswertung nicht zählen
               If ws.Range("F13").Value > 0 Then
                   Wert = Wert + 1
               End If
           End If
       Next ws
    
       ' Zählergebnis in Auswertung ausgeben
       ThisWorkbook.Worksheets("Auswertung").Range("F13").Value = Wert
    End Sub
  4. Anpassen der Zellen:

    • Stelle sicher, dass die Zellen, die du durchsuchst (z.B. "F13"), entsprechend deinem Bedarf angepasst sind.
  5. Führe das Makro aus:

    • Schließe den VBA-Editor und drücke ALT + F8, wähle „AlleTabellenblätterDurchsuchen“ und klicke auf „Ausführen“.

Häufige Fehler und Lösungen

  • Fehler: Zähler wird nicht korrekt erhöht

    • Lösung: Stelle sicher, dass der Zähler Wert vor der Schleife auf 0 gesetzt wird. Überprüfe auch, ob die Zellreferenzen korrekt sind.
  • Fehler: Auswertung wird mitgezählt

    • Lösung: Achte darauf, dass du den Namen des Auswertungsblatts korrekt in der If-Abfrage angibst, wie im obigen Code.
  • Fehler: Schleife überspringt Blätter

    • Lösung: Überprüfe, ob die Blätter tatsächlich vorhanden sind und ob keine Fehler in den Zellreferenzen vorliegen.

Alternative Methoden

  • Verwendung von Select Case für mehrere Ausschlüsse: Wenn du mehrere Blätter ausschließen möchtest, kannst du Select Case verwenden:

    Select Case ws.Name
      Case "Auswertung", "Blatt2" ' Füge hier weitere Blätter hinzu
      Case Else
          If ws.Range("F13").Value > 0 Then Wert = Wert + 1
    End Select
  • Direkte Ausgabe der Zählergebnisse: Du kannst auch die Ergebnisse direkt in eine MessageBox ausgeben:

    MsgBox "Anzahl der Werte: " & Wert

Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele:

  1. Zählen aller Blätter mit einem bestimmten Wert: Du kannst die Schleife anpassen, um nach spezifischen Werten in verschiedenen Zellen zu suchen (z.B. Range("A1")).

  2. Dynamische Blätter durchlaufen: Das oben gezeigte Makro funktioniert unabhängig von den Blattnamen, was es ideal macht, wenn du regelmäßig neue Blätter hinzufügst.


Tipps für Profis

  • Code optimieren: Überlege dir, ob du die Anzahl der Schleifen reduzieren kannst, um die Performance zu steigern.
  • Fehlerbehandlung einfügen: Implementiere On Error Resume Next, um sicherzustellen, dass dein Code auch bei unerwarteten Fehlern weiterläuft.
  • Dokumentation im Code: Kommentiere deinen Code, um die Lesbarkeit zu erhöhen, besonders wenn du mehrere Bedingungen hast.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zellen auf einmal durchsuchen?
Du kannst die Bedingungen innerhalb der Schleife anpassen, um mehrere Zellen zu prüfen, indem du weitere If-Abfragen hinzufügst.

2. Funktioniert dieses Makro in Excel 2016?
Ja, der vorgestellte Code sollte in Excel 2016 sowie in späteren Versionen funktionieren.

3. Was tun, wenn ich die Ausgabe in eine andere Zelle schreiben möchte?
Ändere einfach die Zielzelle in der Zeile, wo das Ergebnis zugewiesen wird (z.B. DS1.Range("G5").Value = Wert).

4. Kann ich das Makro anpassen, um nur bestimmte Blätter zu zählen?
Ja, du kannst die If-Bedingungen entsprechend anpassen, um nur die gewünschten Blätter zu zählen, indem du z.B. spezifische Namen oder Bedingungen verwendest.

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