Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

VBA: Wert in Spalte A plus Wert Spalte B in C





Frage

Hallo liebes Forum, suche verzweifelt eine Möglichkeit tausende von Funktionen im Tabellenblatt zu vermeiden und das ganze Schritt für Schritt per vba zu lösen: Grund ist, dass das Excel-Workbook den Rechner bereits nahezu in die Knie zwingt. Rechenvorgang dauert manchmal 5 Minuten! Also die Aufgabe lautet z.B.: Matrix z.B. 3 Spalten a 1000 Werte A1 + B1 = C1 . . A1000 + B1000 = C1000 Anstelle der Summe sollten dann natürlich auch komplexere Formeln eingesetzt werden können. Für Hilfe jeglicher Art wäre ich sehr dankbar. Viele Grüße und Danke im Vorraus Chrisnelly

Antwort 1 von piano

Hallo
Hier 2 Möglichkeiten von vielen:
1. Berechnung manuell
Sub Rechnen()
Range("A65536").End(xlUp).Offset(1, 0).Select
z = ActiveCell.Row - 1 ´ Anzahl der Daten
Range("A1").Activate
For i = 1 To z
    Cells(i, 3).Value = Cells(i, 1).Value + Cells(i, 2).Value
Next i
End Sub
 

2. Berechnung mit Formel
Sub Rechnen()
Range("A65536").End(xlUp).Offset(1, 0).Select
z = ActiveCell.Row - 1 ´ Anzahl der Daten
Range("c1").Activate
For i = 1 To z
    ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"
    ActiveCell.Offset(1, 0).Activate
Next i
End Sub
 


Gruß piano

Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Chrisnelly

Hallo Piano,
vielen Dank für Deine schnelle und wertvolle Antwort.
Hab´s probiert und bis recht überrascht, wie einfach das offenbar
funktioniert.
Ich frage mich nur, warum dieses nicht Teil jedes Standardtutorials ist.

Hat jemand vielleicht auch eine Lösung für den Fall, dass es zwei enfernt
liegende, evtl. benannte Ranges ("Range1", "Range2") betrifft, die als
summanden in eine Dritte ("Range3") resultieren sollen. Das Zählen von
Spalten erscheint mir dann recht unübersichtlich. Die Größe der Ranges
ist genau definiert (z.B. 1111 Zellen).


Bin sehr gespannt ...
Vielen Dank schon jetzt.
Chrisnelly

Antwort 3 von piano

Hallo
Hoffentlich hast du uns nun genug ausgetestet:
 Sub BeispielRanges()
Dim Range1 As Range, Range2 As Range, Range3 As Range, zelle As Range 
Dim r1, c1, r2, c2, r3, c3

Set Range1 = Range("B1:C9")
Set Range2 = Range("G11") ´ 1. Zelle genügt
Set Range3 = Range("Z22") ´ 1. Zelle genügt

r1 = Range1.Row
r2 = Range2.Row - Range1.Row
r3 = Range3.Row - Range1.Row
c1 = Range1.Column
c2 = Range2.Column - Range1.Column
c3 = Range3.Column - Range1.Column
For Each zelle In Range1
zelle.Offset(r3, c3).Value = zelle.Value + zelle.Offset(r2, c3).Value

Next
End Sub

Gruss piano

Antwort 4 von Chrisnelly

Hallo Piano,
vielen Dank für Deine erneute Hilfe.
Aber, wieso "ausgetestet"? Die Frage war durchaus ernst gemeint.
Viele Grüße
Christian

Antwort 5 von piano

Hallo
Zitat:
wieso "ausgetestet"?
war scherzhaft gemeint - wegen der Folgefrage - hättest ja auch auf einmal fragen können!
Gruss piano