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

VBA gleitende Zwischensumme einfügen

Forumthread: VBA gleitende Zwischensumme einfügen

VBA gleitende Zwischensumme einfügen
Romina
Ich habe eine Tabelle, die variabel in Breite und Länge ist, aber die erste Spalte (B) ist immer an der selben Stelle beispielhaft so etwa:
A 1
A 1
A 1
A 1
A 1
SUMME 5
B 1
B 1
B 1
B 1
B 1
B 1
B 1
B 1
B 1
SUMME 9
C 1
C 1
SUMME 2
D 1
D 1
D 1
SUMME 3
E 1
E 1
SUMME 2
Jetzt muss ich Zwischensummen unter jede schon gegebene Summe einfügen, die dann die vorherige Summe mit der aktuellen verrechnet, also A+B;A+B+C;A+B+C+D;A+B+C+D+E
A kann unterschiedlich lang werden, B-E bleiben immer gleich lang!
Neue Zeile einfügen kann ich, aber wie kann ich diese neuen Summen berechnen lassen.
Bitte helft mir!!!
Grüße Romina
Anzeige
AW: VBA gleitende Zwischensumme einfügen
12.06.2012 17:29:36
fcs
Hallo Romina,
geht es um eine Datei? Oder willst du das für die Anwendung in vielen Tabellen automatisieren?
Für eine oder wenige Tabellen kannst du die folgenden Formeln nach dem Einfügen der Leerzeilen verwenden.
Die Formel muss du in einer Zelle einfügen. Anschließend kannst du sie in die anderen Zeilen und nach rechts kopieren.
Gruß
Franz
Tabellenblattname: Tabelle1
A         B
1              A    1
2              A    1
3              A    1
4              A    1
5              A    1
6          SUMME    5
7              B    1
8              B    1
9              B    1
10              B    1
11              B    1
12              B    1
13              B    1
14              B    1
15              B    1
16          SUMME    9
17  Zwischensumme   14
18              C    1
19              C    1
20          SUMME    2
21  Zwischensumme   16
22              D    1
23              D    1
24              D    1
25          SUMME    3
26  Zwischensumme   19
27              E    1
28              E    1
29          SUMME    2
30       Endsumme   21
Benutzte Formeln:
B17:  =TEILERGEBNIS(9;B$1:B16)-SUMMEWENN($A$1:$A16;"SUMME";B$1:B16)
B21:  =TEILERGEBNIS(9;B$1:B20)-SUMMEWENN($A$1:$A20;"SUMME";B$1:B20)
B26:  =TEILERGEBNIS(9;B$1:B25)-SUMMEWENN($A$1:$A25;"SUMME";B$1:B25)
B30:  =TEILERGEBNIS(9;B$1:B29)-SUMMEWENN($A$1:$A29;"SUMME";B$1:B29)

Anzeige
AW: Crosspost MOF Gruss owT.
12.06.2012 17:39:43
hary
.
AW: VBA gleitende Zwischensumme einfügen
12.06.2012 17:51:49
Romina
Also ich ziehe mir Daten, die dann formatiert werden und in etwa die obige Tabelle entsteht. Mit einem einfachen AMkro aufzeichnen geht es nicht, weil die As mal 5 mal 10 mal 7 Zeilen lang sein können, der Rest bleibt aber immer konstant. Ich muss es also doch mit einem VBA machen, oder?
AW: VBA gleitende Zwischensumme einfügen
12.06.2012 20:17:11
fcs
Hallo Romina,
auch ein aufgezeichnetes Makro ist VBA, aber eben mit eingeschränkten Möglichkeiten
Nachfolgend ein Makro, dass beginnend vom Ende der Liste die erforderlichen Leerzeichen und Formeln einfügt.
Gruß
Franz
Sub Zwischensummen()
Dim wks As Worksheet
Dim i As Long, Zeile_L As Long, Zeile_1 As Long
Dim Spalte_1 As Long, Spalte_L As Long
Dim strA As String
Set wks = ActiveSheet
Zeile_1 = 1 '1 Zeile die in den Formeln summiert werden soll
Spalte_1 = 2 'Spalte in der 1. Formeln eingetragen werden sollen
With wks
'letzte Daten-Zeile
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
'letzte Daten-Spalte
Spalte_L = .Cells(Zeile_L, .Columns.Count).End(xlToLeft).Column
For i = 1 To 4
'Einfügezeile und Text in Spalte A festlegen
Select Case i
Case 1: Zeile_L = Zeile_L + 1: strA = "ENDSUMME"
Case 2: Zeile_L = Zeile_L - 3: strA = "ZWISCHENSUMME"
Case 3: Zeile_L = Zeile_L - 4: strA = "ZWISCHENSUMME"
Case 4: Zeile_L = Zeile_L - 3: strA = "ZWISCHENSUMME"
End Select
'leerzeile einfügen
.Rows(Zeile_L).Insert Shift:=xlShiftDown
'Eintrag in Spalte A
.Cells(Zeile_L, 1) = strA
'Formeln in Leerzeile einfügen
.Range(.Cells(Zeile_L, Spalte_1), .Cells(Zeile_L, Spalte_L)).FormulaR1C1 = _
"=SUBTOTAL(9,R" & Zeile_1 & "C:R[-1]C)-SUMIF(R" & Zeile_1 & "C1:R[-1]C1,""SUMME"",R" _
_
& Zeile_1 & "C:R[-1]C)"
Next i
End With
End Sub

Anzeige
AW: VBA gleitende Zwischensumme einfügen
12.06.2012 20:25:54
romina
Super! Danke! kann es nur leider erst nächste Woche ausprobieren :(
Viele Grüße
AW: VBA gleitende Zwischensumme einfügen
18.06.2012 09:58:24
Romina
Funnktioniert fast perfect! 1000000 Dank!
Nur sucht er den SUMMEWENN-Befehl in der falschen Spalte. Das müsste die r+1 sein.
Was müsste ich Ihm übergeben?
AW: VBA gleitende Zwischensumme einfügen
18.06.2012 11:27:55
fcs
Hallo Romina,
genau kann ich es nicht sagen, da ich nicht verstehe welche Spalte falsch ist.
Die Spalte in der "SUMME" gesucht wird, oder die Spalte in der die entsprechenden Werte stehen, die summiert werden sollen.
SUMIF(R" & Zeile_1 & "C1:R[-1]C1,""SUMME"",R" & Zeile_1 & "C:R[-1]C)

ändern in
SUMIF(R" & Zeile_1 & "C2:R[-1]C2,""SUMME"",R" & Zeile_1 & "C:R[-1]C)

wenn "SUMME" immer in Spalte B steht.
Gruß
Franz
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA für gleitende Zwischensummen in Excel


Schritt-für-Schritt-Anleitung

Um eine Zwischensumme in Excel mit VBA zu berechnen und unter jede bestehende Summe einzufügen, kannst du folgendes Makro nutzen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle das gewünschte Arbeitsblatt aus und füge ein neues Modul ein (Einfügen > Modul).
  3. Kopiere und füge den folgenden Code in das Modul ein:
Sub Zwischensummen()
    Dim wks As Worksheet
    Dim i As Long, Zeile_L As Long, Zeile_1 As Long
    Dim Spalte_1 As Long, Spalte_L As Long
    Dim strA As String
    Set wks = ActiveSheet
    Zeile_1 = 1 '1 Zeile die in den Formeln summiert werden soll
    Spalte_1 = 2 'Spalte in der 1. Formeln eingetragen werden sollen
    With wks
        'letzte Daten-Zeile
        Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
        'letzte Daten-Spalte
        Spalte_L = .Cells(Zeile_L, .Columns.Count).End(xlToLeft).Column
        For i = 1 To 4
            'Einfügezeile und Text in Spalte A festlegen
            Select Case i
                Case 1: Zeile_L = Zeile_L + 1: strA = "ENDSUMME"
                Case 2: Zeile_L = Zeile_L - 3: strA = "ZWISCHENSUMME"
                Case 3: Zeile_L = Zeile_L - 4: strA = "ZWISCHENSUMME"
                Case 4: Zeile_L = Zeile_L - 3: strA = "ZWISCHENSUMME"
            End Select
            'leerzeile einfügen
            .Rows(Zeile_L).Insert Shift:=xlShiftDown
            'Eintrag in Spalte A
            .Cells(Zeile_L, 1) = strA
            'Formeln in Leerzeile einfügen
            .Range(.Cells(Zeile_L, Spalte_1), .Cells(Zeile_L, Spalte_L)).FormulaR1C1 = _
                "=SUBTOTAL(9,R" & Zeile_1 & "C:R[-1]C)-SUMIF(R" & Zeile_1 & "C1:R[-1]C1,""SUMME"",R" & _
                Zeile_1 & "C:R[-1]C)"
        Next i
    End With
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus (ALT + F8 und wähle Zwischensummen aus).

Häufige Fehler und Lösungen

  • Fehler: Falsche Spalte für SUMMEWENN
    Wenn das Makro die Werte nicht korrekt summiert, kann es daran liegen, dass die Spalte in der SUMMEWENN-Formel nicht korrekt eingestellt ist. Ändere den Code wie folgt, um sicherzustellen, dass die richtige Spalte verwendet wird:
SUMIF(R" & Zeile_1 & "C2:R[-1]C2,""SUMME"",R" & Zeile_1 & "C:R[-1]C)
  • Fehler: Keine Leerzeilen eingefügt
    Stelle sicher, dass das Makro im richtigen Arbeitsblatt ausgeführt wird und dass die Struktur der Tabelle dem Beispiel entspricht.

Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du auch die Excel-Funktion TEILERGEBNIS nutzen, um Zwischensummen manuell zu berechnen. Hier ein Beispiel, wie du die Excel Zwischensumme einfügen kannst:

  1. Füge eine neue Zeile unter der gewünschten Summe ein.
  2. Nutze die folgende Formel in der neuen Zeile:
=TEILERGEBNIS(9;B$1:B16) - SUMMEWENN($A$1:$A16;"SUMME";B$1:B16)
  1. Kopiere die Formel nach unten, um die Zwischensummen für andere Datenblöcke zu bilden.

Praktische Beispiele

Angenommen, deine Tabelle hat die folgenden Daten:

A         B
1         A    1
2         A    1
3         A    1
4         SUMME    3
5         B    1
6         B    1
7         SUMME    2

Nach Ausführung des VBA-Skripts solltest du die Zwischensummen wie folgt sehen:

A         B
1         A    1
2         A    1
3         A    1
4         SUMME    3
5         ZWISCHENSUMME    3
6         B    1
7         B    1
8         SUMME    2
9         ZWISCHENSUMME    5

Tipps für Profis

  • Nutze den SUBTOTAL-Funktionstyp 9, um die Zwischensummen dynamisch zu berechnen, während du Daten in deiner Tabelle änderst.
  • Experimentiere mit der SUMIF-Funktion, um spezifische Bedingungen für deine Summen zu setzen.
  • Speichere deine Makros in einer persönlichen Makroarbeitsmappe, um sie in verschiedenen Excel-Dateien verwenden zu können.

FAQ: Häufige Fragen

1. Kann ich die Zwischensumme automatisch aktualisieren?
Ja, wenn du die TEILERGEBNIS-Funktion verwendest, wird die Zwischensumme automatisch aktualisiert, wenn du neue Daten hinzufügst oder bestehende Daten änderst.

2. Funktioniert das Makro in allen Excel-Versionen?
Das bereitgestellte Makro sollte in den meisten modernen Versionen von Excel funktionieren, ab Excel 2010 und höher. Achte darauf, dass du die Makros aktiviert hast.

3. Was, wenn ich mehr als 4 Gruppen von Daten habe?
Du kannst die Schleife im VBA-Code anpassen, um mehr Gruppen zu berücksichtigen, indem du den Wert in For i = 1 To 4 erhöhst.

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