Wie kann ich in VBA Zellen summieren?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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)

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

und so weiter

Ansonsten DH!

0
@DeeDee07

AH! Mal wieder ein Fall, wo gründlich lesen geholfen hätte ... guter Hinweis, das und so weiter habe ich nicht wirklich wahrgenommen.

Wenn es keinen echten Grund gibt für VBA, würde ich dringend die Formellösung von DeeDee empfehlen, da machen Makros nur den üblichen Ärger ohne Mehrwert.

Ja, wenn man das doch mit VBA und mit einer Schleife lösen will, ist eigentlich nur die Frage, wie man den Versatz der Zeilen macht. So sollte es gehen, auch wenn ich irgendwie denke, dass es eleganter sein sollte.

Sub zaehlen()
For i = 1 To 5 'entsprechend erhöhen
Sheets("Tabelle2").Cells(i, 2).Value = Sheets("Tabelle1").Cells(i + i - 1, 2).Value + Sheets("Tabelle1").Cells(i + i, 2).Value
Next
End Sub
2
@Ninombre

Hat geklappt :) 

Muss nur i+i-2 und i+i-3 sein. Vielen Dank!

0
@MaityP

argh - also, es ist gut, dass Du Dich so schnell eingearbeitet hast, um die notwendigen Änderungen direkt vorzunehmen, aber auch ein Zeichen, dass meine Konzentration heute nahe Null ist, weil ich den Text in der Frage auch beim zweiten Mal nicht beachtet habe.

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!

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.

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

WENN- Funktion für ganze Spalte

Hallo,

ich möchte, dass eine WENN Funktion automatisch auf eine ganze Spalte angewendet wird und die Summe gebildet wird.

Bsp: C1=WENN(UND(ODER(Tabelle1!A1=56;Tabelle1!A1=89;Tabelle1!A1=78);Tabelle1!B1=375735);Tabelle1!J1;0)

Ich möchte nun, dass, das nun auf die ganze Spalte angwand wird (also aus A1 wird A2 aus B1 B2 und aus J1 J2) ohne die Formel ewig runterziehen zu müssen (es geht ungefähr bis A1500) und in C1(in der anderen Tabelle die Summe erscheint (also von allen J werten wo DANN eintrit)

Vielen Dank schon jetzt für die Hilfe

...zur Frage

Wie kann ich Excel Formel Ergebnisse sortieren?

Beispiel: wir haben folgende Zellen:

A1 --> 2

B2 --> 4

A2 --> =A1+B1 (=6)

A3 --> =A1-B1 (=-2)

A4 --> =B1-A1 (=2)

A5 --> =A1*B1 (=8)

nun möchte ich in der Spalte B die Inhalte der Formelen sortieren:

d.h. in B2=8, B3=6, B4=2, B=-2.

Mit harten Werten weiß ich wie es funktioniert, aber wie funktioniert dies mit Formelergebnisse???

...zur Frage

Exceltabelle bestimmte zelle springen

Hallo,

beim Öffnen meiner Exceltabelle will ich in eine bestimmte Zelle springen..

Und zwar in der Tabelle1 auf die nächste Freie Zelle in der Spalte B.

Also wenn B1 ungleich 0 dann soll er in die Zelle B2 springen, aber wenn B2 auch ungleich 0, dann soll er in die Zelle B3 springen usw.

Wie kann ich das realisieren?

...zur Frage

Zellen mit gleichem Inhalt pro Spalte automatisch verbinden ?

Hallo Community, möchte gerne alle Zellen gleichen Inhalts pro Spalte automatisch verbinden lassen (Inhalte müssen, wie bei Excel üblich nur einmal erhalten bleiben). Später soll also der Konfernzname, das Datum und der Ort nur noch einmal pro Konferenz auftauchen. Die Teilnehmer und ihre Beiträge könnte man dann zwar auch noch verbinden, aber hier müssten natürlich die ganzen Zellinhalte erhalten bleiben (was Excel üblicherweise nicht macht). Ist wahrscheinlich nur mit VBA möglich oder? Danke im Vorraus

Bild siehe Anhang

...zur Frage

Werte untereinander in Excel erfassen - VBA

Frage an die Excel Profis und VBA Experten. Die Aufgabenstellung baut aufeinander auf.

  1. Aufgabenstellung: Zelle A1 soll als Eingabefeld in Excel dienen. Alle Werte, die in A1 eingegeben werden, sollen einfach untereinander ausgegeben werden, also in a2, a3, a4 usw. Die Cursormarkierung (damit meine ich die schwarze Umrahmung der aktiven Zelle) bleibt aber in A1.

  2. Aufgabenstellung: Aufbauend auf Aufgabenstellung 1 soll nun nachdem in A1 ein Wert eingegeben wurde, der Wert wie gehabt in A2 erscheinen. Die schwarze Umrahmung soll aber jedoch zunächst in B2 erscheinen um einen weiteren Wert einzugeben. Erst nach Eingabe eines Wertes in B2 soll die Umrahmung wieder in A1 springen, damit ein nächster Wert eingegeben werden kann, der dann in Zelle A3 erscheint. Dann springt die Cursormarkierung in B3, um einen Wert einzugeben. Danach wieder in A1 usw.

  3. Aufgabenstellung: Aubauend auf Aufgabenstellung 2 sollen die Werte, die in den Zellen der Spalte B eingegeben werden, mit den Werten der Spalte A im Reiter "Tabelle2" verglichen werden. Sofern der eingegebene Wert in der Spalte B mit denen der Spalte A (Reiter Tabelle2) übereinstimmt, soll Excel ein Fenster öffnen, in dem "Wert gefunden" steht.

Ist das in Excel 2003 per VBA für alle 3 Aufgabenstellungen möglich?

...zur Frage

Was möchtest Du wissen?