Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Summe mit variabler Range

Forumthread: Summe mit variabler Range

Summe mit variabler Range
17.07.2020 15:25:45
Hannah
Hallo liebe Community,
Und schönen Nachmittag. Ich hoffe wirklich, einen von euch auch noch freitags Nachmittags zu erreichen...
Ich möchte mit VBA eine Summe bilden, wobei sich Start- & Endzelle verändern.
Gleich bleibt, dass die Startzelle immer rechts neben Start steht und die Endzelle immer eins rechts von Summe.
So sieht mein Makro derzeit aus (das nicht funktioniert)
Sub Variable Summe()
Dim firstRow As Long
Dim lastRow As Long
With Worksheets("Tabelle1")
Set firstRow = .Columns("B").Find(What:="Start")
Set lastRow = .Columns("B").Find(What:="Summe")
End With
lastRow.Offset(1, 1).Select
ActiveCell.FormulaR1C1 = "=SUM(E" & firstRow & ":E" & lastRow & ")"
End Sub
Mein Gedanke war, die Zeile mit firstRow und lastRow auszulesen und in der Summe zu verwenden.
Hilfe wäre super, denn dann rettet ihr mich vor einem sehr langen Freitag im Büro. O-O
Alles Liebe
Hannah
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: geraten (ohne Nachbau)
17.07.2020 15:35:33
Fennek
Hallo Hannah,
versuche es mit dieser Zeile anstelle der letzten:

lastRow.offset(1,1) = application.sum(range(firstRow, lastRow))
mfg
(ansonsten wäre eine kleine Beispieldatei hilfreich)
AW: Summe mit variabler Range
17.07.2020 15:47:45
Werner
Hallo,
Sub Variable_Summe()
Dim raErste As Range, raLetzte As Range
With Worksheets("Tabelle1")
Set raErste = .Columns("B").Find(What:="Start", LookIn:=xlValues, lookat:=xlWhole)
If raErste Is Nothing Then
MsgBox "Fehler: Startzeile nicht gefunden."
Exit Sub
End If
Set raLetzte = .Columns("B").Find(What:="Summe", LookIn:=xlValues, lookat:=xlWhole)
If raLetzte Is Nothing Then
MsgBox "Fehler: Summenzeile nicht gefunden."
Exit Sub
End If
raLetzte.Offset(1, 1).Formula = "=SUM(E" & raErste.Row & ":E" & raLetzte.Row & ")"
End With
Set raErste = Nothing: Set raLetzte = Nothing
End Sub
Hinweis: In einem Beitrag von dir gibt es Antworten - eine Reaktion deinerseits vermisse ich aber.
Gruß Werner
Anzeige
AW: Summe mit variabler Range
17.07.2020 16:04:26
Hannah
Lieber Walter,
Vielen dank für deine Antwort.
Für mein weiteres Makro habe ich deine letzte Antwort genutzt und bin damit schon sehr weit gekommen. Dafür gleich jetzt vorab ein großes DANKE.
Und auch hier wieder - ich bin beeindruckt und werde danke dir für die souveräne Antwort.
PS: Das danke füge ich natürlich auch noch im anderen Beitrag hinzu :) - dort wollte ich eigentlich meine "beiden" Hilfesteller adressieren aber offenbar siehst du das dann nicht?
Egal, wird gleich nachgeholt.
Ich wünsche ein schönes Wochenende :)
Alles Liebe
Hannah
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
17.07.2020 16:31:48
Werner
AW: eigentlich meinte ich ....
20.07.2020 09:31:40
Hannah
Hallo Werner,
Jetzt verstehe ich, was du meinst...
Diese Frage kam aber nicht von mir, sondern von einem Namensvettern.
Gruß
Hannah 1
Anzeige
AW: Summe mit variabler Range
17.07.2020 15:50:57
Daniel
Hi
1. bei .FormulaR1C1 musst du auch die R1C1-Addressierungsart verwenden und nicht die A1-Addressierungsart wie bei .Formula.
2. du ermittelst hier die Zellen als Objekt, in die formel darf aber nur die Zeilennummer dieser Zellen:
richtig wäre (und dann natürlich ohne Select):
lastRow.Offset(1, 1).FormulaR1C1 = "=Sum(R" & firstRow.Row & "C5:R" & lastRow.Row & "C5)"

wobei du dir das in R1C1 noch etwas vereinfachen kannst, wenn du relative Zellbezüge richtig nutzt:
lastRow.Offset(1, 1).FormulaR1C1 = "=Sum(R" & firstRow.Row & "C5:R[-1]C5)"

oder mit A1-Adressen, da musst man beide Zeilennummern angeben:
lastRow.Offset(1, 1).FormulaR1C1 = "=Sum(E" & firstRow.Row & ":E" & lastRow.Row &")"
prinzipell verwende ich aber folgendes, wenn ich auf diese weise Formeln erstelle, weil es bei längeren Formel übersichtlicher ist, insbesondere dann wenn der gleiche wert mehrfach vorkommt:
Der Dummy-Text darf natürlich nicht auch noch an anderer Stelle regulär in der Formel vorkommen:
dim FO as string
FO = "=Sum(Exxx:Eyyy)"
FO = Replace(FO, "xxx", firstRow.Row)
FO = Replace(FO, "yyy", lastRow.Row)
lastRow.Offset(1, 1).Formula = FO
Gruß Daniel
Anzeige
AW: Summe mit variabler Range
17.07.2020 16:00:52
Hannah
Lieber Daniel,
Vielen Dank für die schnelle Hilfe. Jetzt kann ich dank eurer Hilfe bald in den Feierabend - JUHU :)
ich wünsche dir ein ganz ganz schönes Wochenende!
Alles Liebe
Hannah
AW: Summe mit variabler Range
17.07.2020 16:04:13
Herbert_Grom
Hallo Hannah,
schau dir mal meinen Vorschlag an, der ist schön kurz und knackig:
Option Explicit
Sub VariableSumme()
Dim iFirstRow%, iLastRow%
With Worksheets("Tabelle1")
iFirstRow = .Range("B:B").Find(What:="Start").Row
iLastRow = .Range("B:B").Find(What:="Summe").Row
End With
Cells(iLastRow + 1, 5).Formula = "=SUM(E" & iFirstRow & ":E" & iLastRow & ")"
End Sub
Servus
Anzeige
AW: Summe mit variabler Range
17.07.2020 16:06:32
Hannah
Lieber Herbert,
Danke für die Antwort!
Wirklich sehr elegant gelöst! - JUHU
Ein schönes Wochenende!
Alles Liebe Hannah
Gerne geschehen und danke für die Rückmeldung! owt
17.07.2020 16:10:36
Herbert_Grom
,,,
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Summe mit variabler Range in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Summe mit einer variablen Range in Excel VBA zu erstellen, kannst Du folgende Schritte befolgen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle Einfügen > Modul.
  3. Füge den VBA-Code ein:

    • Kopiere und füge den folgenden Code in das Modul ein:
    Sub VariableSumme()
       Dim raErste As Range, raLetzte As Range
       With Worksheets("Tabelle1")
           Set raErste = .Columns("B").Find(What:="Start", LookIn:=xlValues, lookat:=xlWhole)
           If raErste Is Nothing Then
               MsgBox "Fehler: Startzeile nicht gefunden."
               Exit Sub
           End If
           Set raLetzte = .Columns("B").Find(What:="Summe", LookIn:=xlValues, lookat:=xlWhole)
           If raLetzte Is Nothing Then
               MsgBox "Fehler: Summenzeile nicht gefunden."
               Exit Sub
           End If
           raLetzte.Offset(1, 1).Formula = "=SUM(E" & raErste.Row & ":E" & raLetzte.Row & ")"
       End With
    End Sub
  4. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle VariableSumme aus und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: „Startzeile nicht gefunden“:

    • Überprüfe, ob der Text „Start“ in der Spalte B vorhanden ist. Achte auf Groß- und Kleinschreibung.
  • Fehler: „Summenzeile nicht gefunden“:

    • Stelle sicher, dass der Text „Summe“ ebenfalls in der Spalte B vorhanden ist.
  • Formel funktioniert nicht:

    • Vergewissere Dich, dass die Zellreferenzen korrekt sind. Nutze die .Row-Eigenschaft, um die richtigen Zeilen zu erfassen.

Alternative Methoden

Eine andere Möglichkeit, eine Summe mit variablen Bereichen in Excel zu berechnen, ist die Verwendung von Excel-Formeln direkt in den Zellen:

  • Summe von bis variabel:

    • Du kannst die Formel =SUM(E2:E10) einfach in eine Zelle eingeben, wobei E2 und E10 durch die tatsächlichen Zellreferenzen ersetzt werden.
  • Verwenden von benannten Bereichen:

    • Definiere benannte Bereiche, die sich dynamisch ändern können, und verwende diese in Deiner Formel.

Praktische Beispiele

  1. Beispiel mit VBA:

    • Der oben gezeigte Code addiert die Werte in der Spalte E zwischen den Zellen, die „Start“ und „Summe“ in Spalte B enthalten.
  2. Direkte Excel-Formel:

    • Wenn Du die Zellen manuell anpassen möchtest, nutze:
    =SUM(E2:E10)

    Ändere die Zellreferenzen je nach Bedarf.


Tipps für Profis

  • Verwende Option Explicit:

    • Damit stellst Du sicher, dass alle Variablen deklariert sind, was Fehler vermeiden hilft.
  • Nutze die R1C1-Referenz:

    • Du kannst die R1C1-Referenzierung verwenden, um die Formel flexibler zu gestalten:
    lastRow.Offset(1, 1).FormulaR1C1 = "=SUM(R" & raErste.Row & "C5:R" & raLetzte.Row & "C5)"
  • Fehlerbehandlung:

    • Berücksichtige Fehlerbehandlung in Deinem VBA-Code, um die Benutzerfreundlichkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Summe in einer anderen Spalte berechnen? Du kannst einfach die Spaltenbezeichnung in der Formel ändern. Zum Beispiel, um die Summe in Spalte F zu berechnen, ändere E in F.

2. Was mache ich, wenn die Zellen leer sind? Die SUM-Funktion ignoriert leere Zellen automatisch. Es ist jedoch wichtig, sicherzustellen, dass die Zellen keine Fehlerwerte enthalten, da dies das Ergebnis beeinflussen kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige