michi1983
Goto Top

Dynamisches Summieren in VBA

Hallo admins,

Ich würde etwas Hilfe bei einer Aufgabenstellung benötigen, der ich selbst nicht gewachsen bin.

Gegeben ist folgender Excel Budget-Plan:
2023-10-04 14_19_45-budgetplanung_test.xlsm - excel

Ich bräuchte eine Logik in VBA welche mir - immer dann wenn in Spalte C der Wert "Summe" steht - in den gelb umrandeten Zellen (also die in der gleichen Zeile wie "Summe") eine Summe bildet von allen Werten darunter (grün umrandet) und zwar so lange, bis in Spalte C eine leere Spalte kommt.

Dieses Muster kann sich 1..* wiederholen.
Es kann sein, dass das Dokument nur eine Planungselement darstellt und das Wort "Summe" nur einmal in Spalte C vorkommt, es kann aber auch sein, dass es 10 x vorkommt weil eben 10 Planungselemente vorhanden sind.

Ich habe mich mit ChatGPT versucht, aber entweder ist meine Fragestellung nicht spezifisch genug oder ChatGPT versteht mich nicht.

Hier ist was ich bisher versucht habe:

Sub SummeBerechnen()
    Dim ws As Worksheet
    Dim LastRow As Long
    Dim StartRow As Long
    Dim EndRow As Long
    Dim SumRange As Range
    Dim Cell As Range
    
    ' Set the worksheet where you want to perform the operation  
    Set ws = ThisWorkbook.Sheets("Budgetplanung")  
    
    ' Find the last row in column C  
    LastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row  
    
    ' Initialize the starting row  
    StartRow = 0
    
    ' Loop through the rows  
    For Each Cell In ws.Range("C2:C" & LastRow)  
        ' Check if the cell contains "Summe"  
        If Cell.Value = "Summe" And StartRow = 0 Then  
            ' Calculate the starting row  
            StartRow = Cell.Row + 1
        ElseIf StartRow > 0 And Cell.Value = "" Then  
            ' Calculate the sum range  
            EndRow = Cell.Row - 1
            ' Sum the values in column D  
            ws.Cells(StartRow, "D").Value = WorksheetFunction.Sum(ws.Range("D" & StartRow & ":D" & EndRow))  
            ' Reset the starting row  
            StartRow = 0
        End If
    Next Cell
    
    ' Check if there is a remaining sum range  
    If StartRow > 0 Then
        ' Sum the values in the last group  
        ws.Cells(StartRow, "D").Value = WorksheetFunction.Sum(ws.Range("D" & StartRow & ":D" & LastRow))  
    End If
End Sub

Dieser VBA Code überschreibt mir aber Zeile D14 mit einem Wert wenn ich auf ausführen klicke.
Ich würde mir aber wünschen, dass D13 mit der Summe von D14:D33 überschrieben wird in diesem Beispiel.

Ich bin für jede Hilfe dankbar.

Gruß
Michi

Content-ID: 41461152992

Url: https://administrator.de/contentid/41461152992

Ausgedruckt am: 19.11.2024 um 03:11 Uhr

7907292512
7907292512 04.10.2023 aktualisiert um 14:58:26 Uhr
Goto Top
Moin.
Warum überhaupt VBA dafür? Geht doch auch dynamisch mit einer Formel face-smile
Hier als bsp. für Zelle D13, lässt sich dann mit den Bezügen durch Ziehen und Kopieren auf die anderen anwenden.
=SUMME(BEREICH.VERSCHIEBEN($D14;0;0;VERGLEICH("Summe";$C14:$C$1048576;0)-2))  
Gruß sid
michi1983
michi1983 04.10.2023 um 15:00:36 Uhr
Goto Top
Hi @7907292512,

weil es für den Kollegen zu wenig dynamisch ist.
Ich weiß schon, dass nicht immer jeder gewünschte Lösungsvorschlag auch "sinnvoll" ist.

Sobald er diese Formel nämlich in Zeile D33 eingibt (was ja laut der Anforderung automatisiert passieren soll, dass dort ebenso weiter gerechnet wird), stimmt die Summe nicht mehr, ohne dass die Formel manuell angepasst werden muss.
Ebenso für die anderen Spalten, E und ff.

Gruß
7907292512
7907292512 04.10.2023 aktualisiert um 15:04:20 Uhr
Goto Top
Zitat von @michi1983:
Sobald er diese Formel nämlich in Zeile D33 eingibt (was ja laut der Anforderung automatisiert passieren soll, dass dort ebenso weiter gerechnet wird), stimmt die Summe nicht mehr, ohne dass die Formel manuell angepasst werden muss.
Doch genau das geht damit ja, durch die Bezug(Dollarsetzung) beim Kopieren und Ziehen.
michi1983
michi1983 04.10.2023 um 15:29:31 Uhr
Goto Top
Zitat von @7907292512:

Zitat von @michi1983:
Sobald er diese Formel nämlich in Zeile D33 eingibt (was ja laut der Anforderung automatisiert passieren soll, dass dort ebenso weiter gerechnet wird), stimmt die Summe nicht mehr, ohne dass die Formel manuell angepasst werden muss.
Doch genau das geht damit ja, durch die Bezug(Dollarsetzung) beim Kopieren und Ziehen.

Dann verstehe ich es nicht oder ich bin zu doof, tut mir leid face-confused
Ich paste deine Formel in Zelle D13 und es klappt für den ersten Bereich.
Ich paste diese Formel in Zelle D35:
=SUMME(BEREICH.VERSCHIEBEN($D36;0;0;VERGLEICH("Summe";$C14:$C$1048576;0)-2))  
Das Ergebnis stimmt aber nicht mehr.
2023-10-04 15_27_11-
77160 sollte rauskommen und die Formel berechnet 43096.

Was mache ich falsch?
7907292512
Lösung 7907292512 04.10.2023 aktualisiert um 16:21:17 Uhr
Goto Top
Bevor ich mich jetzt fusselig rede, hier beide Varianten, via Formel und VBA jeweils auf unterschiedlichen Sheets
https://we.tl/t-CSDHHD33s2

So long 🙋
Pjordorf
Pjordorf 04.10.2023 um 16:31:11 Uhr
Goto Top
Hallo,

Zitat von @michi1983:
oder ChatGPT versteht mich nicht.
Jetzt ist endlich ChatGPT schuld. Hurraface-smile

Gruß,
Peter
michi1983
michi1983 04.10.2023 um 16:38:44 Uhr
Goto Top
Zitat von @Pjordorf:

Hallo,

Zitat von @michi1983:
oder ChatGPT versteht mich nicht.
Jetzt ist endlich ChatGPT schuld. Hurraface-smile

Gruß,
Peter

Du weißt, dass ich das nicht ernst meinte face-wink
Deshalb habe ich auch im ersten Teil gesagt, dass ich mich wohl nicht richtig artikuliere.

Gruß
Pjordorf
Pjordorf 04.10.2023 um 16:42:28 Uhr
Goto Top
Hallo,

Zitat von @michi1983:
Du weißt, dass ich das nicht ernst meinte face-wink
Nein, das weiß ich nicht ohne das ein Zertifikat vorliegtface-smile

dass ich mich wohl nicht richtig artikuliere.
Kann sein, muss aber nichtface-smile

Gruß,
Peter
michi1983
michi1983 04.10.2023 um 16:44:10 Uhr
Goto Top
Zitat von @7907292512:

Bevor ich mich jetzt fusselig rede, hier beide Varianten, via Formel und VBA jeweils auf unterschiedlichen Sheets
https://we.tl/t-CSDHHD33s2

So long 🙋

Vielen Dank, klappt perfekt!
7907292512
7907292512 04.10.2023 aktualisiert um 17:20:11 Uhr
Goto Top
👌
Bald kannst du deine Mappe in ChatGPT hochladen und schreiben, "Mach bitte bis Montag fertig ich bin dann mal ins Wochenende" face-big-smile. Ob du dann Montag gefeuert wirst, siehst du wenn das Licht angeht ... 😇
michi1983
michi1983 04.10.2023 um 19:13:09 Uhr
Goto Top
haha zum Glück verdiene ich nicht mein Geld mit sowas 😂 sonst hätte ich schon längst freiwillig gekündigt