Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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

Formel durch VBA ersetzen

Formel durch VBA ersetzen
18.12.2012 17:28:38
Tom
Hallo Ihr Experten,
ich versuche zurzeit mein Mehrjahresprojekt weiter zu optimieren.
In der Tabelle Zusammenfassung möchte ich gerne die Formeln im orangnen Bereich durch eine VBA Lösugn ersetzen um auch die Zirkelbezüge weg zu bekommen.
Gibt es hierfür irgendwie eine ausbaufähige Vorlage oder dergleichen, die man als nichtswissender User entsprechend erweitern kann?
Die Originaldatei umfasst natürlich das komplette Jahr.
https://www.herber.de/bbs/user/83064.xlsm
Gruß Tom

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel durch VBA ersetzen
19.12.2012 08:39:21
Klaus
Hallo Tom,
offtopic: versuche, auf .Select und .Selection zu verzichten sowie die "richtigen" Erweiterungen zu nutzen. Also statt deinem:
Sub start_uebernahme()
' start_uebernahme Makro
Sheets("Zusammenfassung").Select
Range("D1").Select
ActiveCell.FormulaR1C1 = "1"
End Sub
lieber
Sub start_uebernahme()
' start_uebernahme Makro
Sheets("Zusammenfassung").Range("D1").Value = "1"
End Sub
halb ontopic: Deine Formeln haben ein ()-Paar zuviel. Das macht zwar nichts, ist aber unschön und erschwert eventuell eine Fehlersuche.
statt (Beispiel D9)
=IFERROR(IF($D$1=1;(VLOOKUP($A9;Eingaben!$1:$1048576;3;FALSE));D9);D9)
lieber
=IFERROR(IF($D$1=1;VLOOKUP($A9;Eingaben!$1:$1048576;3;FALSE);D9);D9)
ontopic:
Als nichtwissender User machst du das so: den Rekorder an, eine Zelle mit der kopierbaren Formel selektieren (zb D9), du drückst F2 (Zelle aktiviern), ENTER (Zelle bestätigen) und machst den Rekorder wieder aus. Der aufgezeichnete Code sieht dann so aus:
Sub Macro2()
' Macro2 Macro
Range("D9").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
Range("D10").Select
End Sub
das ganze wird zunächst zusammengefahren, um die select loszuwerden. Dann siehts so aus:
Sub Macro2()
Range("D9").FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
End Sub

(alles unnötige rausgeworfen).
Im nächsten Schritt schaust du dir an, WO diese Formel überall hin soll. In deinem Beispiel ist das D9:D28, also das Makro angepasst:
Sub Macro2()
Range("D9:D28").FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
End Sub

dann kommt in deiner Tabelle eine Leerzeile, dann der Bereich D30:D49. Wieder angepasst:
Sub Macro2()
Range("D9:D28").FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
Range("D30:D49").FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
End Sub

an dieser Stelle überlegst du dir vielleicht einen schönerern Tabellenaufbau ohne Leerzeilen :-) Oder du greifst dir gleich das ganze Range ("D9:D28").
Wenn du keine Formeln willst, sondern Werte, überschreib die Inhalte der Zellen mit sich selbst
Sub Macro2()
Range("D9:D28").FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
Range("D30:D49").FormulaR1C1 = _
"=IFERROR(IF(R1C4=1,VLOOKUP(RC1,Eingaben!R1:R1048576,3,FALSE),RC),RC)"
Range("D9:D28").value = Range("D9:D28").value
Range("D30:D49").value = Range("D30:D49").value
End Sub

Ich könnte jetzt noch viel sagen, zB dass du die Formeln nach rechst kopierbar machen könntest (indem du den Spaltenindex des SVERWEIS in eine Zelle oberhalb auslagerst) und dass das tauschen von Formeln gegen VBA dein Zirkelproblem nicht lösen wird (der Formel ist egal, ob du sie schreibst oder VBA sie schreibt), aber spiel erstmal mit diesen Sachen rum :-)
Viel Erfolg!
Grüße,
Klaus M.vdT.

Anzeige
AW: Formel durch VBA ersetzen
19.12.2012 13:36:59
Tom
Hallo Klaus,
vielen Dank für die ausführliche Antwort. Werde mich die nächsten Tage damit intensiver befassen.
Noch eine Idee wie ich mein Zirkelproblem lösen könnte?
Im wesentlichen habe ich eine Tabelle in der über die Woche verteilt verschiedene Eingaben gemacht werden. (Blatt Eingaben)
Bei Klick auf einen Button sollen dann die Werte in die Tabelle Zusammenfassung (Blatt Zusammenfassung) an die entsprechende Stelle eingefügt werden.
Das ganze sollte wie folgt ablaufen vereinfacht ausgeführt
Schaue nach Wert in Zelle a1 (Blatt Eingaben) - suche diesen Wert in Blatt Zusammenfassung - Spalte A
- wird keine Übereinstimmung gefunden, so mache nichts
- wird eine Übereinstimmung gefunden so übernehme den Wert von Zelle in Spalte B in die entsprechende Zeile im Blatt Zusammenfassung in die entsprechende Zelle von Spalte B
- Außer wenn bei einer Übereinstimmung der Suchkriterien die Werte in Spalte B überschrieben werden, sollen die Werte in Spalte B unverändert bleiben.
Ich hoffe das versteht nun einer.
Gruß Tom

Anzeige
AW: Formel durch VBA ersetzen
19.12.2012 13:59:42
Klaus
Hallo Tom,
Ich hoffe das versteht nun einer.
Sorry, ich nicht.
In deiner Musterdatei waren keine Zirkelbezüge. Aber auch keine Daten. Ich hab nur SVERWEIS-e ins leere gesehen. Dein beschriebener Ablauf dürfte aber keine Zirkel verursachen - damit referenzierst du ja nichts doppelt. Du kopierst Werte, keine Formeln, richtig?
Grüße,
Klaus M.vdT.

AW: Formel durch VBA ersetzen
19.12.2012 16:21:17
Tom
Hallo Klaus,
Excel meutert es als Zirkelbezug an sobald eine Formel auf die eigene Zelle verweißt.
Anbei ein Beispiel mit ein wenig Daten - vielleicht wird mein Anliegen nun durchschaubarer.
https://www.herber.de/bbs/user/83077.xlsm
Gruß Tom

Anzeige
Na, wenn das die Regel ist, musst du ...
19.12.2012 17:55:08
Luc:-?
…Iteration zulassen (Berechnungsmenü), Tom!
Gruß Luc :-?

AW: Formel durch VBA ersetzen
20.12.2012 08:15:56
Klaus
Excel meutert es als Zirkelbezug an sobald eine Formel auf die eigene Zelle verweißt (sic)
Und das zurecht! Es gibt doch diesen alten Programmiererwitz:
1) Aussage Nummer zwei ist falsch
2) Aussage Nummer eins ist wahr

Lass uns das ganze mal umdrehen. Deine Fragestellung ist bisher "Wie vermeide ich Zirkelbezüge?" Ich frage zurück: "Was willst du denn mit den Formeln erreichen?"
Bevor du dich auf Iterationen einlässt und dann sonstwas für Ergebnisse rauskommen, lass uns lieber deine Formeln umstellen.
Deine Datei schau ich mir an wenn ich etwas Zeit finde, melde mich dann nochmal.
Grüße,
Klaus M.vdT.

Anzeige
Durch FmlSetzen per VBA kann ...
20.12.2012 20:19:42
Luc:-?
…genausogut ein Zirkelbezug entstehen wie durch manuellen FmlEintrag, Tom;
wenn man also auf die eigene Zelle verweist, ist das in ZellFmln iaR der Fall, das kannst du nur verhindern, indem du Iterationen zulässt, was meist und hier ohnehin unschädlich wäre. Allerdings hat Klaus insofern recht, dass das hier auch völlig unnötig wäre, denn …
Welchen Wert hat wohl eine FmlZelle, wenn die in ihr stehende Berechnung verhindert wird? Natürlich 0! Also kannst du auch gleich 0 in die Fml schreiben. Ist das nicht erwünscht, dann eben etwas Anderes, zB Leerstring "". Wenn du meinst, dass du mit deiner Methode die Zelle ggf als Leerzelle erhalten kannst, ist das ein Trugschluss, denn es steht ja etwas darin, nämlich deine Fml. Also ist allerhöchstens Leerstring oder 0 möglich. Ersteres ist Text und führt deshalb bei bestimmten Berechnungen zu Fehlerwerten, weshalb das oft nicht zu empfehlen ist. Also nimm lieber die 0, die du auch per benutzerdefinierter Formatierung (zB 0;-0;;) „verschwinden“ lassen kannst.
Gruß Luc :-?
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige