Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Berechnung

VBA Berechnung
22.02.2019 21:50:18
AnBad
Hallo,
ich will mittels VBA die Werte in Spalte A mit der von Spalte C multiplizieren.
Das kann ich machen mit einer For i ... next i -Schleife(Celles(i, 3). Ganz easy
Diese Art der Berechnung ist aber echt langsam. Gibt es da keine VBA-Funktion die erlaubt das in einem "Durchgang" für einen Bereich zu machen?
Genauso, wenn ich eine Formel in viele Zellen eintragen lassen will. Das kann man ja ganz einfach wiederrum mit ein For i ... next i Schleife machen. Die Ausführung dauert aber Ewigkeiten?
Wie macht man so etwas?
Oder ist VBA dafür nicht geeignet und man sollte in der Tat in Spalte C die Formel "=A1+B2" und alle weiteren Spalten angeben? Das kann nicht sein, oder?
Danke, schönen Abend!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Berechnung
22.02.2019 22:15:38
Werner
Hallo,
du kannst wieder mit VBA noch per Formel die Einzelwerte von zwei Zellbereichen multiplizieren. Schneller als per Schleife wäre den kompletten Bereich der Spalte A in ein Array einzulesen, die Werte von Spalte c in ein zweites Array. Dann die jeweiligen Werte aus Array 1 mit den Werten aus Array 2 zu multiplizieren (per Schleife) und das Ergebnis in Array 3 ausgeben. Dann das Ergebnisserasen in einem Rutsch in den Zielbereich schreiben.
Stellt sich die Frage, warum nicht per Formel? Was ist dein eigentliches ansinnen?
Gruß Werner
AW: VBA Berechnung
23.02.2019 08:30:29
AnBad
Hi,
Gründe dafür:
1) Ich habe eine Tabellenvorlage. In diese kopiere ich z.B. in Spalte A in bis zu 500 Zeilen diverse Texte. In Spalte B und C trage ich dann zu berechnete Werte ein. In den nächsten 15 Spalten erfolgt dann mittels Formeln eine Berechnung. Ich mochte diese Formeln aber nicht "vorhalten", denn es gibt auch Tabellen, wo ich nur Texte mit vlt 10 Zeilten einfüge. D.H. von den 500 Zeilen mit Ihren Formeln in 15 Spalten sind 490 überflüssig und machen Excel schwerflällig. So dachte ich, das ich die Formeln durch VBA ersetzten kann, so dass nur noch in Abhängigkeit der eingefügten Anzahl Texte eine Berechnung in den Spalten erfolg.
2) Manchmal trage ich die Werte nicht in Spalte B und C ein, sondern direkt das Endergebnis in Spalte 17. In Abhängigkeit davon könnte nun mittels VBA eine Rückwärtsrechnung erfolgen.
In Theorie klappt das ja. Aber alles so langsam?
Für was ist VBA gedacht, wenn nicht zum berechnen? Formatbefehle. Zusammenfassende Berechnungen? Für was?
Viele Grüße
Anzeige
AW: VBA Berechnung
23.02.2019 09:00:28
Werner
Hallo,
dann schreib doch die Formeln per VBA in die Tabelle, das geht für ganze Bereiche in einem Rutsch und ersetzt anschließend die Formeln durch ihre jeweiligen Werte, geht auch für ganze Bereiche.
Gruß Werner
AW: VBA Berechnung
23.02.2019 14:53:06
AnBad
Ja, aber wie geht für ganze Bereiche in einem Rutsch? Das suche ich ja.
vg
AW: VBA Berechnung
23.02.2019 15:03:05
Werner
Hallo,
dann solltest du das auch schreiben. Du hast nach einer direkten Berechnung über VBA gefragt.
Hier jetzt mal für deinen Beispielcode. Wobei bei mir im Code die letzte belegte Zeile in Spalte B ermittelt wird. Wieviele Zeilen du dann da hast ist also wurscht. Beginn ist, wie in deinem Beispiel, in Zeile 19.
Option Explicit
Sub TestCode()
Dim loLetzte As Long
'Blattname anpassen
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 2).End(xlUp).Row
.Range(.Cells(19, 7), .Cells(loLetzte, 7)).FormulaLocal = "=WENN(B19="""";"""";F19*B19)"
End With
End Sub
Gruß Werner
Anzeige
AW: VBA Berechnung
23.02.2019 15:47:32
AnBad
OK, das ging super schnell.
Ich habe verstanden: Range nutzen und die Endzeile als Variable ans Ende. Die einzutragende Formel wird dann auf die Reihennummer angepasst; das wußte ich nicht.
Noch zwei kleine Fragen:
1) Eine Prüfung in der Codezeile:
.Range(.Cells(19, 7), .Cells(loLetzte, 7)).FormulaLocal = "=WENN(B19="""";"""";F19*B19)"

kann man nicht aufnehmen? So dass man das wenn(B19="""";..) weglassen kann also gar keine Formel in diese Zelle eingetrragen werden? Das geht nur mit einer if then-Prüfung, oder? Und das wird dann langsam?
2) Ist es jetzt sinnvoller eine Formel wie eben: =WENN(B19="""";"""";F19*B19) eintragen zu lassen oder VBA bei Eingabe in F19 bzw B19 das Ergebnis ausrechnen und dann eintragen zu lassen? Ich würde ja VBA cooler finden.. Wie macht das ein Profi? In Excelzellen rechnen oder nur noch per VBA?
Tausend Dank soweit!!!!
Anzeige
AW: VBA Berechnung
23.02.2019 15:55:11
Werner
Hallo,
dann ersetz doch danach einfach die Formeln durch das jeweilige Formelergebnis, dann sind die Formeln alle wieder weg und du hast nur das Ergebnis stehen. Ist auf alle Fälle schneller als die Zellen in einer Schleife abzuklappern.
Option Explicit
Sub TestCode()
Dim loLetzte As Long
'Blattname anpassen
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 2).End(xlUp).Row
.Range(.Cells(19, 7), .Cells(loLetzte, 7)).FormulaLocal = "=WENN(B19="""";"""";F19*B19)"
.Range(.Cells(19, 7), .Cells(loLetzte, 7)).Value = .Range(.Cells(19, 7), .Cells(loLetzte, 7) _
).Value
End With
End Sub
Gruß Werner
Anzeige
AW: VBA Berechnung
26.02.2019 18:10:33
AnBad
Feedback:
Hallo Werner,
Deine Lösung mit "Formeln" in die Zellen eintragen zu lassen nutze ich mittlerweile. Das funktioniert ganz gut. Die Formeln bzw. deren Ergebnisse dann darauffolgend noch mit VBA in Werte umzuwandeln, dass mach ich nicht, da der Ablauf: Änderung Zellenwert, Eintrag der neuen Formeln in Zellen und dann Umwandlung eine Verzögerung in Excel aufgrund der erneuten Berechnung hängt.
Aus diversen "Sicherheitsgründen" aufgrund des Andwendungsfalls habe ich es bei den Formeln belassen. Zu einem späteren Zeitpunkt werde ich mich mit Thema nochmals beschägtigen und vlt versuchen es über ein Array zu lösen, wegen der Geschwindigkeit.
Tausend Dank für Deine Hilfe.
Anzeige
AW: VBA Berechnung
23.02.2019 11:05:30
onur
Zu langsam ?
Muss wohl an deinem Code liegen.
Für 5000 Zeilen braucht VBA (Spalte C= Spalte A x Spalte B) 0,3164 Sekunden.
Und das, ohne den Code auf Geschwindigkeit zu optimieren.
AW: VBA Berechnung
23.02.2019 14:50:55
AnBad
Ja, ich hoffe, dass es mein Code ist.
Hier ist er. Da kannst Du aber die Zeit mitzählen, so lange er läuft. Wie macht man das richtig?
Option Explicit
Sub TestCode()
Dim i As Integer
For i = 19 To 25
If Cells(i, 2).Value  "" Then Cells(i, 7).FormulaLocal = "=F" & i & "*B" & i
Next i
End Sub

AW: VBA Berechnung
24.02.2019 08:58:24
Sulprobil
Hallo,
mein Vorschlag wäre, nach "excel vba paste special multiply values" zu googeln und in Excel nicht "" mit numerischen Daten zu vermischen.
Viele Grüße,
Bernd P
Anzeige
AW: VBA Berechnung
26.02.2019 18:00:16
AnBad
Feedback:
Mittlerweile bin ich wieder übergegangen, Formeln in die einzelnen betroffenen Zellen zu schreiben, anstatt VBA "Spalten" multiplizieren zu lassen, weil
1) es mir für den Anwendungsfall mir im nachhinein sicherer zu sein scheint,
2) ich es auch nicht auf einen einfachen Weg lösen konnte.
Zu einem späteren Zeitpunkt werden ich der Sache nochmals nachgehen.
Auf jeden Fall, vielen Dank für die Hilfe

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige