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

Forumthread: Summenbildung per VBA

Summenbildung per VBA
12.02.2005 22:26:08
Martin
Hi,
ich habe eine Summenbildung mit VBA, welche aber nur ein Fenster mit
dem Ergebnis anzeigt.
Wie kann man mit VBA Werte A10:A50 zusammenzählen und
anschließend 2 zeilen unter dem letzten Wert, das wäre A50, dass Ergebnis
einfügen lassen. In der Zelle B1 (variable) ist der Rabatt eingegeben.
Wird die Schaltfläche gedrückt, soll A10:A50 addiert und der Rabatt
Zelle B1 abgezogen werden.
Kann mir bitte jemand weiterhelfen.
Danke
Gruß Martin
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Summenbildung per VBA
12.02.2005 22:29:01
Josef
Hallo Martin!
Warum mit VBA und nicht einfach einer Formel in "A52" ?

Range("A52") = Application.Sum(Range("A10:A50")) - Range("B1")

Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
AW: Summenbildung per VBA
12.02.2005 22:39:59
Martin
Hallo Sepp,
ich habe eine Exceltabelle bei welcher Daten vom Blatt 1 in das Blatt 2 kopiert werden.
Da die Zeilenanzahl ständig variiert, würde mir bei jedem kopieren die Zelle überschrieben.
Deshalb wäre gut, wenn ich eine Summenbildung mit VBA erzwingen könnte und wie bereits
beschrieben in der 2. Zeile unter dem letzten Wert eingefügt würde.
Danke
Gruß Martin
Anzeige
AW: Summenbildung -Variante?
Jens_Pu
Hallo Martin,
nur so als Denkanstoß, deswegen auch noch offen.
Schon mal dran gedacht, die Summenzeile oben zu machen?
Ich mache das teilweise sehr gerne, dass Die Summen über den Spalenbeschriftungen stehen.
Hat den Vorteil, die Formeln sind fest und ich kann unten anfügen, löschen einfügen wie ich will. zusätzlich habe ich immer auch eine Bezeichnung der Summe durch die darunterliegende Spaltenbeschriftung.
Gruß Jens
Anzeige
AW: Summenbildung per VBA
12.02.2005 22:51:35
Josef
Hallo Martin!
Dann zB. so.

Sub summeDynamisch()
Dim lastRow As Long
On Error GoTo ERRORHANDLER
lastRow = IIf(Range("A65536") <> "", 65536, Range("A65536").End(xlUp).Row)
If lastRow < 10 Then lastRow = 10
Cells(lastRow + 2, 1) = _
Application.Sum(Range(Cells(10, 1), Cells(lastRow, 1))) - Range("B1")
Exit Sub
ERRORHANDLER:
Cells(lastRow + 2, 1) = "#WERT"
End Sub

Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: Summenbildung per VBA
12.02.2005 23:17:53
Martin
Hallo Sepp,
genau. Das ist es.
Nur habe ich in B1 Prozentwerte drinnen stehen. Hab es ausprobiert.
Der errechnte Wert stimmt nicht. Bsp. 60 + 10 - B1 (10%) = 60
Eigentlich müßten es 63 sein.
Danke
Gruß Martin
AW: Summenbildung per VBA
12.02.2005 23:24:20
Josef
Hallo Martin!
Prozentrechnen ist schon schwer ;-)
Dann halt so!

Sub summeDynamisch()
Dim lastRow As Long
On Error GoTo ERRORHANDLER
lastRow = IIf(Range("A65536") <> "", 65536, Range("A65536").End(xlUp).Row)
If lastRow < 10 Then lastRow = 10
Cells(lastRow + 2, 1) = _
Application.Sum(Range(Cells(10, 1), Cells(lastRow, 1))) - _
Application.Sum(Range(Cells(10, 1), Cells(lastRow, 1))) * Range("B1")
Exit Sub
ERRORHANDLER:
Cells(lastRow + 2, 1) = "#WERT"
End Sub

Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Anzeige
AW: Summenbildung per VBA
Kay
Hallo Martin,
wenn ich das richtig sehe bezieht sich das auf den Code weiter unten, dort wo ich auch schon mal geantwortet habe.
Da könnte mann es mit einbauen.
Sorry Josef das ich mich einmische.
so z.B.

Sub SuchenUndKopieren()
Dim wksQ As Worksheet   'Quell-Tabelle
Dim wksZ As Worksheet   'Ziel-Tabelle
Dim rng As Range
Dim lngQ As Long
Dim lngz As Long
Set wksQ = Sheets("Quelle")
Set wksZ = Sheets("Ziel")
wksZ.Range("A2:E65536").Clear
lngQ = wksQ.Range("E65536").End(xlUp).Row
lngz = wksZ.Range("A65536").End(xlUp).Row + 1
For Each rng In wksQ.Range(wksQ.Cells(1, 5), wksQ.Cells(lngQ, 5))
If rng.Value > 0 Then
rng.EntireRow.Copy wksZ.Cells(lngz, 1)
lngz = lngz + 1
End If
Next
wksZ.Cells(lngz + 2, 5) = Application.Sum(Range(wksZ.Cells(1, 5), wksZ.Cells(lngz, 5)))-Range("B1")
End Sub

Gruß
Kay
Anzeige
AW: Summenbildung per VBA
13.02.2005 00:44:56
Martin
Hallo Kay, Hallo Sepp,
danke, beides funktioniert perfekt.
Gruß Markus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Summenbildung per VBA in Excel


Schritt-für-Schritt-Anleitung

Um eine Summenbildung per VBA durchzuführen, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx), wähle Einfügen und dann Modul.

  3. Füge den VBA-Code ein: Kopiere den folgenden Code in das Modul:

    Sub summeDynamisch()
       Dim lastRow As Long
       On Error GoTo ERRORHANDLER
       lastRow = IIf(Range("A65536") <> "", 65536, Range("A65536").End(xlUp).Row)
       If lastRow < 10 Then lastRow = 10
       Cells(lastRow + 2, 1) = Application.Sum(Range(Cells(10, 1), Cells(lastRow, 1))) - Application.Sum(Range(Cells(10, 1), Cells(lastRow, 1))) * Range("B1")
       Exit Sub
    ERRORHANDLER:
       Cells(lastRow + 2, 1) = "#WERT"
    End Sub
  4. Schließe den VBA-Editor: Drücke ALT + Q, um zum Excel-Fenster zurückzukehren.

  5. Füge eine Schaltfläche hinzu: Gehe zu Entwicklertools > Einfügen > Schaltfläche (Formularsteuerung).

  6. Verknüpfe die Schaltfläche mit dem Makro: Wähle das Makro summeDynamisch aus und klicke auf OK.

Wenn du jetzt die Schaltfläche drückst, wird die Summe der Zellen von A10 bis zur letzten verwendeten Zelle in Spalte A berechnet und das Ergebnis zwei Zeilen unter dem letzten Wert eingefügt.


Häufige Fehler und Lösungen

  • Fehler: "#WERT" wird angezeigt: Dieser Fehler tritt auf, wenn die Zellen, die addiert werden sollen, leer oder ungültig sind. Stelle sicher, dass die Zellen in dem angegebenen Bereich gültige Zahlen enthalten.
  • Das Ergebnis ist nicht korrekt: Überprüfe, ob in Zelle B1 der Rabatt korrekt eingegeben wurde und ob die Berechnung in der Zeile mit Cells(lastRow + 2, 1) richtig ist.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch eine einfache Excel-Formel verwenden:

  1. Gehe zu Zelle A52 (oder die gewünschte Zelle).
  2. Gib die folgende Formel ein:

    =SUMME(A10:A50) - B1

Diese Methode ist jedoch statisch und nicht dynamisch wie die VBA-Lösung. Sie aktualisiert sich nicht automatisch, wenn neue Daten hinzugefügt werden.


Praktische Beispiele

Nehmen wir an, du möchtest die Summe in Spalte B berechnen und das Ergebnis unter dem letzten Wert in Spalte B einfügen:

Sub summeB()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
    Cells(lastRow + 1, 2) = Application.Sum(Range(Cells(1, 2), Cells(lastRow, 2))) - Range("B1")
End Sub

Dieser Code addiert alle Werte in Spalte B und zieht den Rabatt in B1 ab. Er zeigt das Ergebnis in der Zelle direkt unter dem letzten Wert in Spalte B an.


Tipps für Profis

  • Nutze die Debug.Print-Anweisung, um Werte während der Ausführung des Codes zu überprüfen.
  • Verwende Variablen wie lastRow, um die Dynamik deiner VBA-Lösungen zu erhöhen, anstatt feste Zellreferenzen zu verwenden.
  • Wenn du regelmäßig mit VBA arbeitest, speichere deine Makros als Add-In, um sie in anderen Projekten wiederverwenden zu können.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Application.Sum und der SUMME-Formel in Excel?
Application.Sum ist eine VBA-Funktion, die in Makros verwendet wird, während SUMME eine Excel-Formel ist, die direkt in Zellen eingegeben wird. Beide führen jedoch die gleiche Summenbildung durch.

2. Wie kann ich sicherstellen, dass mein VBA-Code immer die neuesten Werte berücksichtigt?
Verwende die Methode Range.End(xlUp) um die letzte verwendete Zeile zu ermitteln. So wird sichergestellt, dass dein Code immer mit den aktuellsten Daten arbeitet.

3. Was tun, wenn die Schaltfläche nicht funktioniert?
Stelle sicher, dass das Makro nicht durch Sicherheitseinstellungen in Excel blockiert wird. Gehe zu Datei > Optionen > Trust Center und überprüfe die Einstellungen für Makros.

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