Summe aus unbestimmter Anzahl Tabellenblätter...

Frage: Aus einer unbekannten Anzahl Tabellenblätter (die Anzahl kann auch mehr werden - die Startposition ist aber immer das dritte Tabellenblatt), soll die Summe aus Spalte C in einem Tabellenblatt "Auswertung" gezogen werden. Die Namen der Tabellenblätter sollen automatisch in Spalte A gelistet sein die Summen in Spalte B. Wie geht das?

Hier noch eine Beispieldatei: Summe aus unbestimmter Anzahl Tabellenblätter...

Option Explicit
'-------------------------------------------------------------------------- 
' Module    : Modul1 
' Procedure : Main 
' Author    : Case (Ralf Stolzenburg) 
' Date      : 27.11.2012 
' Purpose   : Summe aus unbestimmter Anzahl Tabellenblätter... 
'-------------------------------------------------------------------------- 
Sub Main()
    ' Dimensionieren der Variablen 
    Dim wksSheet As Worksheet
    Dim lngLastRow As Long
    ' Wenn ein Fehler auftritt gehe zu der angegebenen Sprungmarke 
    On Error GoTo Fin
    ' Der Code bezieht sich auf ein bestimmtes Objekt 
    ' Hier Tabelle "Auswertung" 
    ' Alles was sich auf dieses "With" bezieht MUSS mit einem Punkt beginnen 
    With ThisWorkbook.Worksheets("Auswertung")
        ' lösche ab Zeile 2 abwärts den Inhalt raus 
        .Rows("2:" & .Rows.Count).ClearContents
        ' Alle Tabellenblätter in der Mappe mit dem Code 
        For Each wksSheet In ThisWorkbook.Worksheets
            ' Wenn die Tabelle am Index > 2 ist, dann... 
            If wksSheet.Index > 2 Then
                ' schreibe den Tabellenblattnamen der Tabellen AB Index 3 
                ' in Spalte A in die erste freie Zelle 
                .Range("A" & Rows.Count).End(xlUp) _
                    .Offset(1, 0).Value = wksSheet.Name
            End If
        Next wksSheet
        ' Bestimme jetzt die Anzahl der Zeilen in Spalte A 
        lngLastRow = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
            .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
        ' Trage nun in Spalte B ab Zeile 2 bis Ende Spalte A die Formel 
        ' =WENN(ISTFEHLER(SUMME(INDIREKT(A2&"!C:C"))); 
        ' "-";SUMME(INDIREKT(A2&"!C:C"))) ein 
        .Range("B2:B" & lngLastRow).Formula = _
            "=IF(ISERROR(SUM(INDIRECT(A2&""!C:C"")))," & _
            """-"",SUM(INDIRECT(A2&""!C:C"")))"
        ' Wandel die Formel in Werte um 
        .Range("B2:B" & lngLastRow).Value = .Range("B2:B" & lngLastRow).Value
    End With
Fin:
    ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung 
    If Err.Number <> 0 Then MsgBox "Error: " & _
        Err.Number & " " & Err.Description
End Sub

Beliebte Posts aus diesem Blog

Formeln - auch Array - per VBA eintragen...

Alle Dateien eines Ordners - Optional mit Unterordner

Excel -> Word in Textmarken (Bookmarks)...