abuelito
Goto Top

Excel Summenbildung mit VBA

Hallo an Alle,

ich habe wieder mal eine Frage bzw. ein Problem.

In einer Exceldatei befinden sich 2 Spalten mit Inhalten. Spalte A mit der Überschrift in Zelle A1 "Kauf / Verkauf" .. mit den Inhalten entweder ein "K" oder ein "VK" .. und in Spalte B mit der Überschrift in Zelle B1 "Anzahl" .. mit negativen oder positiven Zahlen (ohne Dezimalstellen)

Wenn in Spalte A (ab Zelle A2) ein VK steht, dann ist die Zahl in Spalte B (ab Zelle B2) eine negative Zahl.

Jetzt kommt mein Problem:

Ich muss nach allen Käufen eine Summe bilden und auch nach allen Verkäufen.

Beispiel:

Ist-Zustand
A2 K B2 10
A3 K B3 20
A4 K B4 15
A5 VK B5 -5
A6 VK B6 -5
A7 K B7 35

Soll-Zustand
A2 K B2 10
A3 K B3 20
A4 K B4 15
A5 B5 45
A6 VK B6 -5
A7 VK B7 -5
A8 B8 35
A9 K B9 35
A10 B10 70
usw.


Wer kann mir bitte helfen dies mit VBA zu lösen?

Vielen Dank und viele Grüße

Content-Key: 275423

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

Printed on: April 27, 2024 at 13:04 o'clock

Mitglied: 114757
114757 Jun 23, 2015 updated at 13:13:19 (UTC)
Goto Top
Da reicht die Formel SUMMEWENN()
Gleiche Daten abgleichen und zusammenfassen
=Summewenn(A1:A20;"VK";B1:B20)
und
=Summewenn(A1:A20;"K";B1:B20)
Gruß jodel32
Member: abuelito
abuelito Jun 23, 2015 at 13:29:08 (UTC)
Goto Top
Hi,

aber macht diese Funktion auch die Summe mit der Summe?

Siehe mein Beispiel:

Ist-Zustand
A2 K B2 10
A3 K B3 20
A4 K B4 15
A5 VK B5 -5
A6 VK B6 -5
A7 K B7 35

Soll-Zustand
A2 K B2 10
A3 K B3 20
A4 K B4 15
A5 B5 45 (das ist die Summe aus A2 bis A4)
A6 VK B6 -5
A7 VK B7 -5
A8 B8 35 (das ist die Summe aus A5 (Summe von A2-A4) bis A7)
A9 K B9 35
A10 B10 70 (das ist die Summe aus A8 (Summe A5 bis A7) bis A9)
usw.
Mitglied: 114757
114757 Jun 23, 2015 updated at 14:03:34 (UTC)
Goto Top
Sub Zwischensummen()
    Dim currentCell As Range, rngSumStart As Long
    With ActiveSheet
        Set currentCell = .Range("A2")  
        rngSumStart = .Range("A2").Row  
        While currentCell.Value <> ""  
            If currentCell.Offset(1, 0).Value <> currentCell.Value Then
                currentCell.Offset(1, 0).EntireRow.Insert xlShiftDown
                currentCell.Offset(1, 0).Value = "Zwischensumme"  
                currentCell.Offset(1, 1).Formula = "=Sum(B" & rngSumStart & ":B" & currentCell.Row & ")"  
                rngSumStart = currentCell.Row + 2
                Set currentCell = currentCell.Offset(2, 0)
            Else
                Set currentCell = currentCell.Offset(1, 0)
            End If
        Wend
    End With
End Sub
Member: abuelito
abuelito Jun 23, 2015 at 14:30:14 (UTC)
Goto Top
Hi,

eine Frage:

Was bedeutet currentCell.offset(1, 0) ... die 1 und die 0?

Vielen Dank für Deine Hilfe

Grüße
Mitglied: 114757
114757 Jun 23, 2015 updated at 14:44:55 (UTC)
Goto Top
Was bedeutet currentCell.offset(1, 0) ... die 1 und die 0?
Eine Zelle relativ zu einer anderen, die erste Zahl ist der Offset vertikal(RowOffset) und die zweite horizontal(ColumnOffset) zur Zelle die mit currentCell referenziert ist.

Lässt sich aber mit einem einfachen Blick in die Doku auch erfahren !
https://msdn.microsoft.com/de-de/library/office/ff840060.aspx
Member: abuelito
abuelito Jun 23, 2015 at 14:48:29 (UTC)
Goto Top
Vielen Dank für die Erklärung
Member: abuelito
abuelito Jun 23, 2015 at 14:53:56 (UTC)
Goto Top
Hi,

leider werden nur die Zwischensummen gebildet, aber die Zwischensummen bei der nächsten Zwischensummenbildung nicht mitberücksichtigt:

Siehe Ergebnis nach dem ich das Makro ausgeführt habe:

Kauf/Verkauf Anzahl
K 13
K 1
Zwischensumme 14
VK -11
VK -7
Zwischensumme -18
K 2
Zwischensumme 2
VK -1
Zwischensumme -1
K 1
Zwischensumme 1

Die 2. Zwischensumme müsste eigentlich das Ergebnis -4 lauten ( = Zwischensumme 14 + (-11) + (-7) )

Vielen Dank für Deine Hilfe.
Mitglied: 114757
114757 Jun 23, 2015 updated at 15:01:22 (UTC)
Goto Top
Das wusste ich nicht das du das so haben wolltest, aber deshalb habe ich dir doch SummeWenn vorgeschlagen, Ganz einfach in zwei Zellen unterhalb der ganzen Zahlen einfgefügt und schon hast du das richtige Ergebnis ! Warum so umständlich ?
Schau dir mal die Doku zu SummeWenn an dann weist du was Sache ist!
SummeWenn zählt nur die Zahlen zusammen die entweder VK haben oder eben in einer anderen Formel K feddich ... ist doch nicht so schwer ...
Member: abuelito
abuelito Jun 23, 2015 at 15:03:36 (UTC)
Goto Top
Ich weiß, aber ich benötige den Verlauf leider chronologisch ... es sind knapp 5.000 Zeilen und am Ende muss 0 herauskommen

Kann man diesen Schritt nicht in Dein vorhandenes VBA Script einbauen?

Vielen Dank
Mitglied: 114757
Solution 114757 Jun 23, 2015 updated at 16:29:48 (UTC)
Goto Top
Kann man diesen Schritt nicht in Dein vorhandenes VBA Script einbauen?
Klar, einfach die Summenformel durch Summewenn() (sumif()) ersetzen.
Das solltest du jetzt auch selber hinbekommen, bringt ja nix wenn ich dir hier alles vorbete. Sollst ja auch was dabei lernen ...

Probiers also erst mal selber und wenn du bis morgen nicht weiterkommst melde dich nochmal. Dann poste ich dir die Lösung.


Edit: Hier die Lösung für den Fall das du hier noch mal vorbei schaust: Zeile 10 so abändern
currentCell.Offset(1, 1).Formula = "=Sumif(A2:A" & currentCell.Row & ",""<>Zwischensumme"",B2:B" & currentCell.Row & ")"  
Member: abuelito
abuelito Jun 23, 2015 at 15:09:39 (UTC)
Goto Top
OK, guter Vorschlag .. Danke Dir
Member: abuelito
abuelito Jun 23, 2015 at 16:29:50 (UTC)
Goto Top
Hi,

super, vielen lieben Dank.

Viele Grüße