Wie kann ich in VBA Zellen summieren?

... komplette Frage anzeigen

4 Antworten

Zellen kannst Du in zwei Weisen ansprechen:
Range("A1") oder cells(1,1). Bei cells ist zu beachten, dass erst Zeile, dann Spalte genannt wird, quasi andersrum als bei Formeln.

Eine Zelle hat diverse Eigenschaften (Schriftfarbe, Rahmen etc.) - Du möchtest den Wert verändern:

Range("A1").value=... oder cells(1,1).value=...

Um noch das Tabellenblatt zu berücksichtigen:
Sheets("Tabelle2").Range("B2").value=

Zum Rechnen:
Bei nur zwei Zellen kannst Du diese einfach zusammenzählen. Sonst gäbe es noch die Summenfunktion in VBA worksheetfunction.sum

Sheets("Tabelle2").Range("B2").value=sheets("Tabelle1").Range("B3").value+sheets("Tabelle1").Range("B4").value

sheets("Tabelle2").range("B2").value=WorksheetFunction.Sum(Sheets("Tabelle1").Range("B3:B4").Value)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DeeDee07
30.09.2016, 21:01

Ich nehme an, da muss auch noch eine Schleife drumrum. Wegen

und so weiter

Ansonsten DH!

0

Nachdem ich mich jetzt 1 1/2 h mit der Syntax rumgeärgert hab, geb ich jetzt auch noch meinen Senf dazu:

VBA ist sehr unflexibel, so dass ich immer eine Formellösung bevorzuge (Formel in Tabelle2!B1:

=index(Tabelle1!B:B;Zeile(B1)*2-1;0)+index(Tabelle1!B:B;Zeile(B1)*2);0))

und runterziehen soweit nötig. Eine Formel wird auch von zB LibreOffice & Co "verstanden", VBA-Makros nicht.

Wenns aber unbedingt VBA sein muss (zB zum VBA-Lernen) dann diese UdF (ebenfalls in i'einer Tabelle, B1 setzen und runterziehen)

  • Public Function SumZweiZeilenZuEiner(Target As Range)
  • Application.Volatile
  • SumZweiZeilenZuEiner = ActiveWorkbook.Worksheets("Tabelle1").Cells(Target.Row * 2, Target.Column).Value + ActiveWorkbook.Worksheets("Tabelle1").Cells(Target.Row * 2 - 1, Target.Column).Value
  • End Function

    Die Berechnung jeder einzelnen Funktion dauert allerdings ziemlich lang, was eine Neuberechnung der Datei empfindlich verzögern kann.


Beachte: änderst du den Namen der Funktion, musst Du ihn auch im Inneren der Funktion (Beginn lange Zeile=3.Punkt) anpassen!

Antwort bewerten Vielen Dank für Deine Bewertung

Muss es ein Makro sein?

Du kannst auch in Tabelle2, B1 folgende Formel verwenden:

=SUMME(INDIREKT("Tabelle1!B"&ZEILE(A1)*2-1&":B"&ZEILE(A1)*2))

Diese Formel in Spalte B runterkopieren.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DeeDee07
30.09.2016, 20:23

Alternativ in B1:

=SUMME(BEREICH.VERSCHIEBEN(Tabelle1!B$1:B$2;ZEILE(A1)*2-2;0))

und ebenfalls runterkopieren.

2

Wenn Du das nicht per Funktion, sondern unbedingt per VBA lösen willst, wäre das hier eine recht simple Lösung:

Sub Summieren()
Dim i As Integer
For i = 1 To 100 Step 2
Sheets("Tabelle2").Cells(Application.WorksheetFunction.RoundUp(i / 2, 0), 2) = Cells(i, 2) + Cells(i + 1, 2)
Next i
End Sub

Das geht aber sicherlich auch eleganter.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Oubyi
30.09.2016, 21:20

So wäre es imho etwas eleganter, aber wohl auch komplizierter:

Sub Summieren2()
Dim Bereich As Range
Dim Zelle As Range
Dim Summe As Double

Set Bereich = ActiveSheet.Range("B1:B100")
For Each Zelle In Bereich
If Zelle.Row Mod 2 = 0 Then
Summe = Zelle.Value + Zelle.Offset(-1, 0).Value
Sheets("Tabelle2").Cells(Zelle.Row / 2, 2) = Summe
End If
Next Zelle
End Sub

Es fehlt aber immer noch z.B. eine Fehlerbehandlung.

0

Was möchtest Du wissen?