avalon1
Goto Top

VBA - Summe berechnen

In Spalte A Datum...in Spalte E Zahlen (Gewichte)
Solange in Spalte A gleiches Datum soll Spalte E summiert werden

Hello,

also wie schon kurz beschrieben habe ich im Sheet1 in Spalte A Daten in Form von zB: 1.6.10, 1.6.10, 1.6.10, 2.6.10, 2.6.10, etc.
stehen (natürlich untereinander face-wink und in Spalte E stehen in den gleichen Zeilen Gewichtswerte

Nun möchte ich alle Gewichte vom 1.6.10 zusammenzählen,
bei mir wär dass von E2 (weil ein 1. Zeile stehen Beschreibungen)
bis E15

Das Ergebnis sozusagen soll dann in Sheet2 eingetragen werden
und zwar wie folgt:

1.6.10 Summe Gewichter vom 1.6.10

Mein erster Einfall war mir Datum und Gewicht von Sheet1 zu holen
und mit einer Schleife immer das Datum zu prüfen und das Gewicht dann
zu addieren und das Endergebnis in Sheet2 eintragen
-> Hier hatte ich dass Problem, was mach ich wenn das Datum sich ändert
ih hatte hier eine ganze Menge Prüfungen und dann den Überblick verloren

Meine zweite Idee war mir das Datum aus Sheet1 zu holen
und mir zu merken in welcher Zeile das erste Datum steht ( zB: Zeile 2 )
und dann nach unten zu zählen so lange das Datum ident ist ( zb: Zeile 15 )
Die zwei Werte ( 2 und 15 ) speichern und dann hergehen und
sagen dass das Datum in Sheet2 in zB: A2 eingetragen wird
und dann daneben die Summe von Sheet1 E2:E15


Ideen hätte ich ja aber leider bin ich in VBA nicht so sattelfest....
vielleicht könnt ihr mir ja helfen.

Zur Zeit habe ich bei "Idee2" folgenden Code generiert:


Private Sub DatenSammlen_Walter_taegl()

Dim TempGewicht As Long
Dim SummeGewicht As Long

Dim TempDatum As Date
Dim PruefDatum As Date

Dim ZaehlerBeginn As Long

Dim ZaehlerEnde As Long
Worksheets("LKW-Walter_Daten").Activate
ZaehlerEnde = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Dim ZaehlerSummeBeginn As Long
ZaehlerSummeBeginn = 2
Dim ZaehlerSummeEnde As Long

For ZaehlerBeginn = 2 To ZaehlerEnde
PruefDatum = Worksheets("LKW-Walter_Daten").Range("A" + Trim(Str(ZaehlerBeginn)))
Next ZaehlerBeginn


End Sub


Bis dato hab ich ja mal das Datum mit dem ich Pruefend in Sheet1 nach unten laufen will
Ich steh nur grad voll auf der Leitung.....vielleicht ist es auch schon ein bisserl spät....
vielleicht habt ihr ja ein paar Inputs für mich!!

lg
ava

Content-ID: 145712

Url: https://administrator.de/forum/vba-summe-berechnen-145712.html

Ausgedruckt am: 23.12.2024 um 17:12 Uhr

bastla
bastla 26.06.2010 um 00:17:12 Uhr
Goto Top
Hallo Avalon1!

Wenn Du keine Pivot-Tabelle verwenden willst, dann etwa so (für "Idee1"):
Private Sub DatenSammlen_Walter_taegl()
Worksheets("LKW-Walter_Daten").Activate  
ZaehlerBeginn = 2
ZaehlerEnde = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

ZielTabelle = "Tabelle2"  
ZielZeile = 2

For QuellZeile = ZaehlerBeginn To ZaehlerEnde + 1 '+1, um auch die letzte Summe noch zu schreiben  
    If Cells(QuellZeile, "A") <> Datum Then 'neue Gruppe  
        If QuellZeile > ZaehlerBeginn Then 'Eintragen  
            With Worksheets(ZielTabelle)
                .Cells(ZielZeile, "A") = Datum  
                .Cells(ZielZeile, "B") = Summe  
                ZielZeile = ZielZeile + 1
            End With
        End If
        Datum = Cells(QuellZeile, "A")  
        Summe = Cells(QuellZeile, "E")  
    Else
        Summe = Summe + Cells(QuellZeile, "E")  
    End If
Next
End Sub
Voraussetzung ist natürlich, dass nach der Spalte A sortiert wurde ...
[Edit] Fehlenden "Else"-Zweig nachgereicht [/Edit]

Die zweite Variante (ist aber auch nur bedingt dynamisch - etwa, wenn nachträglich in der Quelltabelle noch eine Zeile an der richtigen Stelle eingefügt würde) sollte so zu machen sein:
Private Sub DatenSammlen_Walter_taegl()
Worksheets("LKW-Walter_Daten").Activate  
ZaehlerBeginn = 2
ZaehlerEnde = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

ZielTabelle = "Tabelle3"  
ZielZeile = 2

VonZeile = QuellZeile
For QuellZeile = ZaehlerBeginn To ZaehlerEnde + 1
    If Cells(QuellZeile, "A") <> Datum Then  
        If QuellZeile > ZaehlerBeginn Then 'Eintragen  
            With Worksheets(ZielTabelle)
                .Cells(ZielZeile, "A") = Datum  
                .Cells(ZielZeile, "B").Formula = "=SUM(" & ActiveSheet.Name & "!E" & VonZeile & ":E" & QuellZeile - 1 & ")"  
                ZielZeile = ZielZeile + 1
            End With
        End If
        Datum = Cells(QuellZeile, "A")  
        VonZeile = QuellZeile
    End If
Next
End Sub
Grüße
bastla
76109
76109 26.06.2010 um 18:14:28 Uhr
Goto Top
Hallo Avalon1 und bastla!

So könnte Variante 2 (ähnlich bastlas Variante 2) auch funktionieren. Ist aber aus Zeitgründen nur oberflächlich getestetface-wink

Option Explicit

Const SheetDaten = "LKW-Walter_Daten"  
Const SheetSummen = "Gewichts-Summen"  

Const DatenStartZeile = 2
Const SummenStartZeile = 2

Private Sub DatenSammlen_Walter_taegl()
    Dim Datum As Date, DatenZeile As Long, MerkZeile As Long, SummenZeile As Long

    Worksheets(SheetDaten).Activate
    
    Datum = Cells(DatenStartZeile, "A")  
    MerkZeile = DatenStartZeile
    SummenZeile = SummenStartZeile
    
    For DatenZeile = DatenStartZeile To Cells(Rows.Count, "A").End(xlUp).Row + 1  
        If Cells(DatenZeile, "A") <> Datum Then  
            With Worksheets(SheetSummen)
               .Cells(SummenZeile, "A") = Datum  
               .Cells(SummenZeile, "B") = WorksheetFunction.Sum(Range(Cells(MerkZeile, "E"), Cells(DatenZeile - 1, "E")))  
                Datum = Cells(DatenZeile, "A")  
                MerkZeile = DatenZeile
                SummenZeile = SummenZeile + 1
            End With
        End If
    Next
End Sub

Gruß Dieter

[edit] Auf bastlas Anregung Daten-Summen-Spalte nach "E" geändert [/edit]
bastla
bastla 26.06.2010 um 20:57:03 Uhr
Goto Top
@Dieter

Eigentlich ist Dein Vorschlag eine Mischung aus Variante 1 und 2, da zwar die Summenberechnung über "SUMME" erfolgt, in die Zielzelle aber nur das Ergebnis eingetragen wird ...

Die letzten beiden "B" der Zeile 22 sollten übrigens lt Angabe jeweils "E" sein ...

Grüße
bastla
76109
76109 26.06.2010 um 22:54:12 Uhr
Goto Top
Hallo bastla!

Ups, bin wohl etwas aus der Übungface-smile

Habe im Moment noch viel mit Wohnung einrichten zu tun (derzeit Küche einbauen) und dachte mach mal ne Pause und spiel ein bischen.

Ob jetzt die Von- und Bis-Zellen ermittelt werden und dann die Formel oder die Summe in die Zielzelle geschrieben wird, kommt doch irgendwie auf's gleiche raus?face-wink
Es sei denn, die Werte werden nachräglich verändert, dann wäre es natürlich sinnvoller die Formel reinzuschreiben?

Gruß Dieter
bastla
bastla 27.06.2010 um 00:12:33 Uhr
Goto Top
Hallo Dieter!
Ob jetzt die Von- und Bis-Zellen ermittelt werden und dann die Formel oder die Summe in die Zielzelle geschrieben wird, kommt doch irgendwie auf's gleiche raus?face-wink
Es sei denn, die Werte werden nachräglich verändert, dann wäre es natürlich sinnvoller die Formel reinzuschreiben?
Sehe ich auch so - und hinsichtlich der Formel habe ich ja oben schon die eingeschränkte Dynamik angemerkt (wobei sich auch nicht wirklich viel ändern würde, wenn anstelle von "SUMME" ein "ZÄHLENWENN" verwendet würde - es käme auch dann noch immer darauf an, dass alle Datumswerte in der zweiten Tabelle genau einmal aufscheinen) ...

Grüße
bastla

P.S.: Weiterhin viel Spaß beim Einrichten (auch wenn's manchmal eher "viel" als "Spaß" sein kann face-wink) ...
Avalon1
Avalon1 18.08.2010 um 20:10:55 Uhr
Goto Top
Hy

ich wollt mich bei euch für eure Tipps bedanken, aber ich bekomms nicht hin face-sad

ich mach das jetzt anders....hoffentlich klappt das!

lg
ava