Frage von ExcelVBABeginn, 23

EXCEL VBA / MAKRO - Wert nach Neu-Berechnung aufaddieren?

Moin moin,

Ich bin noch nicht so VBA bewandert & stehe vor einem Problem dass ich so selber nicht mit googeln o.ä. lösen kann. In meiner Tabelle kalkuliere ich einen ausgewählten Bereich durch Klick eines Buttons der mit einem Makro verlinkt ist.

Sub Kalk() Worksheets("Tabelle1").Range("A1:E8").Calculate End Sub

Das Ergebniss (in B8) wird dann seperat in einer anderen Zeile ausgewiesen (E4). Meine Frage: Ich möchte beim erneuten klicken des Buttons, dass das Ergebniss zu dem vorher kalkulierten Wert (in E4) dazuaddiert wird. Das ist logischerweise ohne Makro nicht möglich... Mir fehlt hier allerdings derrichtige Ansatz & Kentnisse im VBA-Bereich.

Würde mich sehr freuen, wenn mir hier geholfen warden kann.

Danke vorab! -Patrick

Expertenantwort
von Iamiam, Community-Experte für Excel, 11

Damit Du wenigstens nachvollziehen kannst, welche Zahlen addiert wurden, kannst du Folgendes machen

...
Worksheets("Tabelle1").Range("E4").formula =Worksheets("Tabelle1").Range("E4").formula &"+"&Worksheets("Tabelle1").Range("B8").value
...

Das sonst notwendige formulalocal kannst Du hier weglassen, da + im dt und im am. gleich ist.
Wird also 2x die gleiche Zahl addiert, siehst du das. xl verkraftet sehr lange Formeln, allerdings musst du mit =0 als "Initialzündung" starten.

Theoretisch könnte man mit

...&"+N(Text(Jetzt();""""T.M. h:mm:ss"""")"

auch noch den Aktionszeitpunkt festhalten, kommt auf Deine Arbeitsweise und den Datenanfall an (bei vielen gleichen Beträgen vllt sogar sinnvoll), da braucht man aber dann Formulalocal, musst Du wg der genauen Syntax ein bisschen rumprobieren bzw in der Hilfe nachlesen. Ich krieg das heute nacht jedenfalls nicht mehr hin, vermutlich wg der Gänsefüßchen, mit denen ich immer wieder auf Kriegsfuß stehe...

Als Krücke hab ich das vorläufig mal ganz anders, nämlich so- geschrieben: ActiveCell.FormulaLocal = ActiveCell.FormulaLocal & "+" & Now() * 10 ^ -10

Das liefert ein leicht verfälschendes Inkrement in der Größenordnung von 10^-6, das sich aber im Kopf nicht zu Datum/Uhrzeit umsetzen lässt, allenfalls vergleichen. Mal sehen, ob mir noch was gescheites dazu einfällt!

Kommentar von Iamiam ,

Nach vielem Rumprobieren hab ich jetzt diese Methode gefunden:

An die Zellformel der markierten Zelle (kannst auch Range("E4") festlegen*) wird der Wert in B8 als Summand dazuaddiert, zusätzlich der String für die Zeitkontrolle (+N("Text") ergibt +0)

  • Sub AdditionsFormelAnhängenMitKontrollZeit()
  • ActiveCell.FormulaLocal = ActiveCell.FormulaLocal & "+" & Range("B8").Value & "+N(" & """" & Format(Now(), "ddd, h:mm:ss") & """" & ")"
  • End Sub

das kann beliebig oft wiederholt werden, bei gleichen Werten und verdächtig kleinen Zeitabständen hast du ein Indiz für doppelte Betätigung des Knopfs (aber natürlich kein Beweis, nur eine Nach- Denk-Marke)

*) In der Zelle sollte vorher schon eine Formel stehen, eine Leere Zelle wird als Text gefüllt und angezeigt, kann aber durch Entfernen des führenden Hochkommas jederzeit richtig aktiviert werden.

Probiers aus!

Kommentar von Iamiam ,

noch eine Verallgemeinerung: willst du die Holzelle in Abhängigkeit von der Zielzelle relativ adressiert haben, dann anstatt  Range("B8").value den Ausdruck Range("E4") oder noch allgemeiner

Activecell.offset(Z-diff, S-diff).value nehmen, die Z- und S-diff können als variable Parameter innerhalb des Makros verändert werden.

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 20
Range("E4").Value = Range("E4").Value + Range("B8").Value
Kommentar von Iamiam ,

Pass aber auf, dass Du nicht zweimal oder öfter klickst! Solche Makros bergen die (riesige!) Gefahr, dass man hinterher nicht mehr nachvollziehen kann, was passiert ist!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten