Microsoft Excel

Herbers Excel/VBA-Archiv

Summe per VBA bilden

Betrifft: Summe per VBA bilden von: Matthias
Geschrieben am: 05.10.2020 11:39:44

Hallo zusammen,

ich möchte eine Summe via Makro bilden, allerdings ist die zu berücksichtigende Anzahl der Zeilen variabel.

Ich habe es folgendermaßen versucht:

Sub summe()
Dim l as Long
Dim lmax as Long
Dim swert as Long
Dim zwert as Long

Cells(1, 37).Value = "Tour-Summe"
l = 3
lmax = Worksheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row

Do Until l > lmax

If Cells(l, 36).Value <> Cells(l - 1, 36).Value Then
Cells(l - 1, 34) = swert
ElseIf Cells(l, 36).Value <> Cells(l + 1, 36).Value Then
Cells(l, 34) = zwert
End If
Cells(l, 37).Value = "=SUMME(" & swert & ":" & zwert & ")"

l = l + 1
Loop
End Sub
 
Falls mein Versuch nicht verständlich sein sollte...
Ich lasse den Code prüfen, ob die Zelle l - 1 den gleichen Wert in Spalte 36 hat,
wenn ja, dann soll die Zelle (l - 1, 34) den ersten Wert bilden (AH2 in dem Fall)
Wenn l + 1 einen anderen Wert hat, dann soll l, 34 den letzten Wert der Summe bilden, beispielsweise AH10.
Anschließend soll eine Zelle rechts von zwert (AH10) die Summe gebildet werden "=SUMME(AH2:AH10)".

Kann mir jemand erläutern wie dies in VBA umsetzbar ist?
Vielen lieben Dank vorab und besten Gruß

Matthias

Betrifft: AW: Summe per VBA bilden
von: ralf_b
Geschrieben am: 05.10.2020 11:46:30

Cells(l - 1, 34) = swert wann wird denn swert und zwert gefüllt?

swert = Cells(l - 1, 34) ???

Betrifft: AW: Summe per VBA bilden
von: Matthias
Geschrieben am: 05.10.2020 11:57:51

Hallo Ralf,

Wenn eine neue Tourennummer (in Spalte AH) beginnt, dann soll die Zelle als erster Wert (swert) der Summe deklariert werden, wenn diese Tournummer endet, dann als letzte Zelle.
Rechts neben der letzten Zelle soll dann eine Summe gebildet werden, die jede Zeile mit der selben Tournummer berücksichtigt. Bspw. =SUMME(AH2:AH10)

Die Tournummern haben unterschiedlich viele Zeilen, sind jedoch alle untereinander.
Wenn eine Nummer endet, beginnt die nächste.

LG

Betrifft: AW: Summe per VBA bilden
von: ralf_b
Geschrieben am: 05.10.2020 13:07:49

schon gut, ich glaube du hast mich nicht verstanden.
wo im unten stehenden Code erhalten dein variablen ihren wert?
ich sehe nur eine Deklaration und später dann eine Zuweisung der Werte aus den "leeren" Variablen in eine Zelle.
 Dim swert as Long
    Dim zwert as Long
    
    Cells(1, 37).Value = "Tour-Summe"
    l = 3
    lmax = Worksheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row
    
    Do Until l > lmax
    
    If Cells(l, 36).Value <> Cells(l - 1, 36).Value Then
    Cells(l - 1, 34) = swert
    ElseIf Cells(l, 36).Value <> Cells(l + 1, 36).Value Then
    Cells(l, 34) = zwert


Betrifft: AW: Summe per VBA bilden
von: Matthias
Geschrieben am: 05.10.2020 13:40:06

Hab das mittlerweile lösen können,
danke trotzdem für die Hilfe!

Für alle die auf dieses Thema per Google stoßen:
Sub summe()
Dim l As Long
Dim lmax As Long
Dim mmin As Long
Dim mmax As Long

l = 2
lmax = Worksheets(2).UsedRange.SpecialCells(xlCellTypeLastCell).Row

Do Until l > lmax
Do Until Cells(l, 2).Value = "ZIEL"
If Cells(l, 2).Value = "START" Then
mmin = l
ElseIf Cells(l, 2).Value = "ZIEL" Then
mmax = l
End If
l = l + 1
Loop
mmax = l
Cells(l, 37).Value = "=SUM(R[-" & mmax - mmin & "]C[-3]:RC[-3])"
l = l + 1
Loop
End Sub


Betrifft: AW: Summe per VBA bilden
von: Jörg Kannengießer
Geschrieben am: 05.10.2020 11:49:42

ich ermittele mir oft die Anzahl der "gefüllten Zeilen" über
Selection.CurrentRegion.Rows.Count

Man könnte auch eine While-Schleife machen:
While ActiveCell.Value <> ""
oder
While Celle(i,36) = ...

Betrifft: AW: Summe per VBA bilden
von: Matthias
Geschrieben am: 05.10.2020 12:00:44

Hallo Jörg,

danke schonmal für den Input.
Wie würde es den mit Selection.CurrentRegion.Rows.Count aussehen?
Bzw wie steuer ich dann an, dass die richtigen Zeilen ermittelt werden)

LG