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

Worksheetfunction.Sum

Forumthread: Worksheetfunction.Sum

Worksheetfunction.Sum
04.01.2018 18:29:55
Tobias
Moin!
Ich habe folgenden Code:
'abschließend wird das Tabellenblatt Daten (aggregiert) erstellt
'alle Daten löschen
Tabelle17.Cells.ClearContents
letztereihe = Tabelle4.Range("A2").End(xlDown).Row
'Anzahl Versuchswerte kopieren
Tabelle17.Range("A1").Value = "Versuchswerte"
Tabelle4.Range("A2:A" & letztereihe).Copy Destination:=Tabelle17.Range("A2")
'Daten aggregieren
'Gesamtkonzern
Set Range = Tabelle1.Range("C2:C" & Tabelle1.Range("B500").End(xlUp).Row)
For Each zelle In Range
If zelle.Value = "x" Then
strGesuchteGesellschaft = zelle.Offset(0, -1).Value
letztespalte = Tabelle17.Range("AZ1").End(xlToLeft).Column
letztespalte = letztespalte + 1
Set rGesuchteGesellschaft = Tabelle4.Range("A1:AZ100").Find(strGesuchteGesellschaft, LookIn:=xlValues)
Tabelle4.Range(rGesuchteGesellschaft, rGesuchteGesellschaft.End(xlDown)).Copy Destination:=Tabelle17.Cells(1, letztespalte)
End If
Next
letztespalte = Tabelle17.Range("AZ1").End(xlToLeft).Column
letztespalte = letztespalte + 1
Tabelle17.Cells(1, letztespalte) = "AGGREGIERT Gesamtkonzern xyz"
letztereihe2 = Tabelle17.Range("A1").End(xlDown).Row
For i = 2 To letztereihe2
Tabelle17.Cells(i, letztespalte).Value = Application.WorksheetFunction.Sum(Range(Cells(i, 2), Cells(i, letztespalte)))
Next i
Ich habe von Spalte B bis Spalte Z in 50.000 Zeilen Werte stehen, welche in AA summiert werden sollen. In Excel selbst kann ich das nicht lösen, da auch gerne mal mehr oder weniger Spalten dort sein können.
Mit der Formel Application.Worksheetfunction... erhalte ich einen Anwendungs- oder objektdefinierten Fehler.
Woran liegt das? Ich verstehe es einfach nicht. :/
VG, Tobias
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Öhm ...
04.01.2018 18:36:53
lupo1
... wird bei xyz tatsächlich so mit VBA programmiert? Oder bist Du externer Wirtschaftsprüfungsassistent?
AW: Öhm ...
04.01.2018 20:37:06
Gerd
Hallo Tobias,
möglicherweise daran:
For i = 2 To letztereihe2
Tabelle17.Cells(i, letztespalte).Value = Application.WorksheetFunction. :
Sum(Tabelle17.Range(Cells(i, 2), Tabelle17.Cells(i, letztespalte)))
Next i
Gruß Gerd
Anzeige
Referenzierungsfehler
05.01.2018 12:15:21
Rudi
Hallo,
With Tabelle17
letztespalte = .Range("AZ1").End(xlToLeft).Column
letztespalte = letztespalte + 1
.Cells(1, letztespalte) = "AGGREGIERT Gesamtkonzern xyz"
letztereihe2 = .Range("A1").End(xlDown).Row
For i = 2 To letztereihe2
.Cells(i, letztespalte).Value = Application.WorksheetFunction.Sum(.Range(.Cells(i, 2), .Cells( _
i, letztespalte)))
Next i
End With

Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Anwendung der WorksheetFunction.Sum in VBA


Schritt-für-Schritt-Anleitung

  1. Daten in Excel vorbereiten: Stelle sicher, dass deine Daten in der Excel-Tabelle korrekt angeordnet sind. Die Werte, die summiert werden sollen, sollten in den Spalten B bis Z und in bis zu 50.000 Zeilen stehen.

  2. VBA-Editor öffnen: Gehe in Excel auf "Entwicklertools" und wähle "Visual Basic". Alternativ kannst du die Tastenkombination ALT + F11 verwenden.

  3. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (deineDatei.xlsm)" und wähle "Einfügen" > "Modul".

  4. Code eingeben: Kopiere den folgenden Code in das Modul:

    Sub SummeAggregieren()
       Dim letztereihe As Long
       Dim letztespalte As Long
       Dim i As Long
    
       'Daten in Tabelle17 aggregieren
       Set Tabelle17 = ThisWorkbook.Sheets("Tabelle17")
       letzterreihe = Tabelle4.Range("A2").End(xlDown).Row
    
       'Summenberechnung
       With Tabelle17
           letztespalte = .Range("AZ1").End(xlToLeft).Column
           letztespalte = letztespalte + 1
           .Cells(1, letztespalte) = "AGGREGIERT Gesamtkonzern"
           letzterreihe2 = .Range("A1").End(xlDown).Row
    
           For i = 2 To letzterreihe2
               .Cells(i, letztespalte).Value = Application.WorksheetFunction.Sum(.Range(.Cells(i, 2), .Cells(i, letztespalte - 1)))
           Next i
       End With
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Führe das Makro aus, um die Summen in der gewünschten Spalte zu berechnen.


Häufige Fehler und Lösungen

  • Anwendungs- oder objektdefinierter Fehler: Dieser Fehler tritt häufig auf, wenn der Bereich in der WorksheetFunction.Sum nicht korrekt referenziert ist. Stelle sicher, dass du die richtige Tabelle und den richtigen Bereich verwendest. Ändere den Code wie folgt:

    .Cells(i, letztespalte).Value = Application.WorksheetFunction.Sum(.Range(.Cells(i, 2), .Cells(i, letztespalte - 1)))
  • Referenzierungsfehler: Wenn du Tabelle17 nicht korrekt referenzierst, kann dies ebenfalls zu Fehlern führen. Verwende den With Tabelle17 Block, um sicherzustellen, dass alle Zellen korrekt angesprochen werden.


Alternative Methoden

  • Verwendung von Application.Sum: Eine alternative Methode zur Summierung kann die Verwendung der Application.Sum Funktion sein, die eine ähnliche Funktionalität wie WorksheetFunction.Sum bietet. Beispiel:

    .Cells(i, letztespalte).Value = Application.Sum(.Range(.Cells(i, 2), .Cells(i, letztespalte - 1)))
  • Direkte Excel-Formeln: Du kannst auch Excel-Formeln direkt in Zellen eingeben. Zum Beispiel kannst du in Zelle AA2 die Formel =SUM(B2:Z2) eingeben und diese nach unten ziehen.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du die Summierung in einer Tabelle umsetzen kannst:

Sub BeispielSumme()
    Dim letzteZeile As Long
    letzteZeile = Tabelle17.Cells(Tabelle17.Rows.Count, 1).End(xlUp).Row
    For i = 2 To letzteZeile
        Tabelle17.Cells(i, "AA").Value = Application.WorksheetFunction.Sum(Tabelle17.Range("B" & i & ":Z" & i))
    Next i
End Sub

In diesem Beispiel wird die Summe der Werte von Spalte B bis Z für jede Zeile in Spalte AA berechnet.


Tipps für Profis

  • Performance-Optimierung: Bei großen Datenmengen kann es sinnvoll sein, Bildschirmaktualisierungen und Berechnungen während der Ausführung des Makros auszuschalten:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unvorhergesehene Fehler elegant zu behandeln:

    On Error Resume Next
    ' Dein Code hier
    If Err.Number <> 0 Then
       MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    End If

FAQ: Häufige Fragen

1. Frage Was ist der Unterschied zwischen Application.WorksheetFunction.Sum und Application.Sum?

Antwort Application.WorksheetFunction.Sum ist eine Methode, die die Excel-Funktionen direkt in VBA aufruft, während Application.Sum eine VBA-eigene Methode ist, die ebenfalls Summen berechnen kann, aber weniger formalisiert ist.

2. Frage Wie kann ich die Summe nur für bestimmte Zellen berechnen?

Antwort Du kannst die Zellen, die du summieren möchtest, manuell angeben, indem du den Bereich in der Funktion änderst, z. B. Application.WorksheetFunction.Sum(.Range("B2:B10")).

3. Frage Kann ich die Berechnung der Summe in einer anderen Tabelle durchführen?

Antwort Ja, du kannst die Tabelle, auf die du zugreifen möchtest, entsprechend referenzieren. Achte darauf, dass du den richtigen Tabellenblattnamen verwendest, z. B. Worksheets("TabelleX").Cells(...).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige