Zählen über mehrere Blätter


Um in Excel Formeln  über mehrere Blätter zu erstellen ist oft viel Friggelei notwendig.

Einfacher ist es, wenn man sich seine eigene Formel bastelt. Im unten angehängen XLS-File habe ich exemplarisch die Funktion „ZaehleX“ erstellt.

Sie zählt auf jedem vorhandenen Sheet in der übergebenen Spalte der Zelle ob in Zeile 12 ein „X“ steht und trägt die Summe in die aktuelle Zelle.
Aufgerufen wird sie, z.B. mit:

=ZaehleX(A1)

Dann zählt die Funktion auf jedem Sheet in der Zeile 12 Spalte A (=> Kommt von der übergebenen Zelle) jedes großgeschriebene X.

 

Public Function ZaehleX(ByVal target As Range) As String
   Dim i, Anzahl As Integer
   Anzahl = 0
   For i = 1 To Worksheets.Count
          If Worksheets(i).Cells(12, target.Column).Value = „X“ Then Anzahl = Anzahl + 1
   Next

     ZaehleX = Anzahl
End Function

 

Es ist eine öffentlich deklarierte Funktion, die einen String, also einen Text zurückliefert. Sie enthält 2 Variablen, einmal die Gesamtanzahl der „X“ und einen Zähler zum hochzählen der Sheets. Bei Fragen, wisst ihr ja wo ihr mich findet.

 

Hier die Datei zum Download: Zaehlen

 

Um z.B. die Reihe auch abhängig von der Selektion zu machen, kann man z.B. statt „12“ auch „target.row“ eintragen.
Dann ist es immer die Zeile, in der die Zielreihe ist:

If Worksheets(i).Cells(target.row, target.Column).Value = „X“ Then Anzahl = Anzahl + 1

Oder man möchte einzelne fest benannte Sheets z.B. „Ohnemich“ überspringen, dann würde eine Zusatzabfrage in der Schleife ausreichen:

For i = 1 To Worksheets.Count
If Sheets(1).Name = „Ohnemich“ Then goto weiter  
          If Worksheets(i).Cells(12, target.Column).Value = „X“ Then Anzahl = Anzahl + 1
weiter:
Next

„Goto weiter“ zwingt das Coding dazu zu springen. Dies ist aus Programmierersicht ein NO – GO, aber es funktioniert, ist zweckmäßig und Microsoft will es nicht besser!
Schönere Varianten sind leider nur umständlicher möglich, durch Verschachtelung oder Negation, wie z.B. hier:

For i = 1 To Worksheets.Count
          If NOT Sheets(1).Name =  „Ohnemich“ Then
If Worksheets(i).Cells(12, target.Column).Value = „X“ Then Anzahl = Anzahl + 1
end if
Next

Alternativ könnte auch ein anderer Vergleichsoperator genutzt werden. Statt dem „=“ (gleich) könnte man auch „<>“ (ungleich) nutzen.

If Sheets(1).Name <>  „Ohnemich“ Then

 

Das soll vorerst an Ausführungen genügen… Die Möglichkeiten sind so zahlreich wie die Wege nach Rom. Manche sind kurvig, manche steil und andere sind einfach nur beschissen…