VBA: Zwei Spalten mit Wert multiplizieren und dann addieren mit Hilfe von Makros
Hallöchen,
ich habe folgendes Problem Ich habe zwei Spalten die ich jeweils miteinander addieren möchte. Doch bevor ich diese addiere, möchte ich Spalte B mit dem Wert aus der TextBox1 multiplizieren und Spalte C mit dem Wert aus Textbox2. Danach sollen beide Spalten miteinander addiert und dann sortiert werden. Spalte D ist in diesem Fall die Ergebnisspalte. Das Programm hat auch schon funktioniert, jedoch habe ich vorher nur die spalten addiert und sortiert.
HIer mein bereits geschriebener Code:
Private Sub CommandButton1_Click()
' Prüfen ob Lastspitzen eingetragen wurden, ansonsten Fehlermeldung
If TextBox1.Value = "" Or TextBox2.Value = "" Then
MsgBox "Bitte geben Sie eine Lastspitze ein!"
Else
Dim wks As Excel.Worksheet
Dim lngLetzteZeile As Long
Dim Last1 As Integer
Dim Last2 As Integer
Last1 = TextBox1.Value
Last2 = TextBox2.Value
Set wks = ActiveWorkbook.Worksheets("Vergleich")
With wks
lngLetzteZeile = .Cells(.Rows.Count, "B").End(xlUp).Row
If lngLetzteZeile < 15 Then Exit Sub
With .Range("D15:D" & lngLetzteZeile)
'berechne: D := B + C
.FormulaR1C1 = "=RC[-2]*Last1+RC[-1]*Last2"
'Formeln durch deren Ergebnis ersetzen
.Value = .Value
End With
With .Range("B15:D" & lngLetzteZeile)
.Sort Key1:=.Cells(2), Order1:=xlDescending, _
DataOption1:=xlSortTextAsNumbers, _
SortMethod:=xlPinYin
End With
End With
End If
End Sub
3 Antworten
Das Multiplizieren und danach Summieren geht doch gaaaanz einfach ohne Formel im Blatt nur mit Code:
For I = 15 To LetzteZeile 'I ergibt die Zeile im Blatt
Cells(I, 2) = Cells(I, 2) * TextBox1 'Multipliziert Zelle in B (...,2) mit Textbox 1
Cells(I, 3) = Cells(I, 3) * TextBox2 ' dito C (...,3) mit Textbox 2
Cells(I, 4) = Cells(I, 2) + Cells(I, 3) 'und nun die Summe bilden und in D eintragen
Next I
Musst Du jetzt nur noch einbauen. Und nicht vergessen: Dim I as Long
Versuche mal folgende Formel. Vielleicht kannst du sie dir nach deinen Vorstellungen noch umbauen:
Range("D1:D" & lngLetzteZeile).Value = _
"=A1 * " & Last1 & " + B1 * " & Last2
anstelle von
....FormulaR1C1 = "=RC[-2]*Last1+RC[-1]*Last2"
In deiner Schreibweise wäre korrekt:
.FormulaR1C1 = "=RC[-3]*" & Last1 & "+RC[-2]*" & Last2
Du musst die Variablen aus der Zeichenkette ziehen.
Desweiteren ergibt so etwas wenig Sinn:
.Value = .Value
wieso arbeitest du auf einmal mit fomula Local?
bleib doch bei einer schleife. Warum erst eine Formel in eine Zelle schreiben wenn du sowieso nur den Wert haben willst.
cells(i,4) = cells(i,2)*
Last1 + cells(i,3)*Last2