Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1848to1852
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 mit Variablen angeben

Formel mit Variablen angeben
07.10.2021 14:05:14
Christian
Hallo zusammen,
ich hoffe hier kann mir jemand helfen.
In einem Makro habe ich eine Formel, in der alle Größen über Variablen angesprochen werden sollen. Bisher habe ich schon viele möglichen Syntaxe versucht, aber irgendwie war der richtige noch nicht dabei.
Nr ist die Variable für die Zeile und Col_K_H, Col_K_R sind in dem Fall Variablen für die Spalten.
Zelle.Formula = "=Cells(" & Nr & ", " & Col_K_H & ") - Cells(" & Nr & ", " & Col_K_R & ")
Schon mal danke im voraus.
VG

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel mit Variablen angeben
07.10.2021 14:25:55
Daniel
HI
die Funktion CELLS gibts in Excelformeln nicht!
in Excel gibtr man die Zelladressen direkt ohne eine Funktion an.
zur Auswahl steht lediglich, ob die Zelladressen im A1-Format mit Spaltenbuchstabe und Zeilennummer angegeben werden, oder im Z1S1-Format, wo auch die Spalten Als Nummer angegeben werden.
also entweder so:

Zelle.Formula = "=" & Cells(Nr, Col_K_H ).Address & "-" & Cells(Nr, Col_K_R).Address
oder so:

=Zelle.FormulaR1C1 = "=R" & Nr & "C" & Col_K_H & "-R" & Nr & "C" & Col_K_R
sollte Col_K_H und Col_K_R Stringvariablen sein, die den Spaltenbuchstaben enthalten, würde auch das gehen:

Zelle.Formula = Col_K_H & Nr & "-" & Col_K_R & Nr
mein persönlicher Favorit wäre aber das hier

FO = "=xxx-yyy"
FO = Replace(FO, "xxx", Cells(Nr, Col_K_H).Address)
FO = Replace(FO, "yyy", Cells(Nr, Col_K_R).Address)
Zelle.Formula = FO
gerade bei Längeren Formeln ist die Methode mit dem Dummy-Text und dem Austausch mit dem Variablenwert deutlich übersichtlicher als das zuammenstoppeln von Teiltexten.
Gruß Daniel
Anzeige
AW: Formel mit Variablen angeben
07.10.2021 14:49:33
Christian
Hi Daniel,
super! vielen Dank für die schnelle Hilfe. Da hab ich wieder was gelernt :) Der Einfachheit halber habe ich erstmal die Lösung mit FormulaR1C1 umgesetzt, allerdings werde ich sobald alles funktioniert wohl auf deine präferierte Lösung umsteigen.
Aber wie das halt so ist, taucht nach einem gelösten Problem, das nächste Ungelöste auf... Die Formel passt jetzt, allerdings greift mit der passenden Formel meine For Each-Schleife nicht mehr, in der die Formel eingebettet war. Nun setzt er in alle Zellen die maximale Zeilenzahl ein. Hast du hierzu vielleicht auch einen Ratschlag?
For Each Zelle In Wb.Range(Cells(iRow, lZielspalte), Cells(2, lZielspalte))
Nr = Zelle.Row
Zelle.FormulaR1C1 = "=R" & Nr & "C" & Col_K_H & "-R" & Nr & "C" & Col_K_R & "
Next Zelle
VG
Anzeige
AW: Formel mit Variablen angeben
07.10.2021 17:19:59
onur
Was soll denn eigentlich am Ende der Formel das hier?
& "
AW: Formel mit Variablen angeben
08.10.2021 08:54:47
Christian
Ups, wie gesagt, so ganz verstehe ich die Syntax nicht... Habe bisher auch noch keine Erklärung dafür gefunden.
Deshalb komme ich auch gerade nicht weiter, wenn ich die Formel um eine Division am Ende: / "R" & Nr & "C" & Col_M ergänzen will. Jetzt spuckt er mir den "Fehler 13 - Typen unverträglich" aus.
Kannst du mir vielleicht kurz erklären, was man wann, wie formulieren muss oder wo ich diese Information finde? Also zwischen Variablen und sonstigen Teilen der Formel müssen & gesetzt werden und die Angabe R für Row und C für Column muss in Anführungszeichen, oder? Wobei die Operatoren ja auch mit in den Anführungszeichen stehen. Aber wenn ich bei der Division die Anführungszeichen vom R vor das Geteilt-Zeichen schreibe bekomme ich den Fehler Anwendungsende erwartet oder so... Aaaaargh, ich verzweifel hier noch!
Anzeige
AW: Formel mit Variablen angeben
08.10.2021 09:27:49
Daniel
Die Syntax ist einfaches Verketten von Strings aus festen Textteilen, die in Anführungzeichen stehen müssen, mit Variablen, die nicht in Anführungszeichen stehen dürfen.
Am Ende muss ein Text entstehen, der dem Formeltext in der gewünschten Schreibweise (.Formula, .FormulaR1C1) entspricht.
Wie dieser aussehen muss, kannst du feststellen, in dem du die Formel normal von Hand in die Zelle schreibst, dann die Zelle markiert und im Direktfenster den Befehl ?Selection.Formula oder ?Selection.FormulaR1C1 eingibst
gruß Daniel
AW: Formel mit Variablen angeben
08.10.2021 09:21:08
Daniel
Hi
wenn in der Formel die Zeilennummer derjenigen Zelle verwendet wird, in welche die Formel geschrieben wird, dann solltest du die R1C1-Schreibweise nutzen mit der Möglichkeit relative Zellbezüge auch relativ beschreiben zu können, dh nicht mit der absolten Zeilennummer, sondern mit dem Versatzwert.
Vorteil des Versatzwertes ist, dass dieser unabhängig von der Zielzelle und damit immer konstant ist.
bei gleicher Zeile ist der Versatzwert 0, daher wird dann aus deiner Formel:

Zelle.FormulaR1C1 = "=R(0)C" & Col_K_H & "-R(0) & "C" & Col_K_R 
bzw in der Kurzschreibweise, da man das "(0)" weglassen darf:

Zelle.FormulaR1C1 = "=RC" & Col_K_H & "-RC" & Col_K_R 
wie du siehst, brauchst du hier die Variable Nr nicht mehr, das ist der Vorteil der R1C1-Schreibweise für Zelladressen.
noch ein Tipp: wenn man in mehrere Zellen die gleiche Formel schreibt, sollte man das nicht per Schleife machen, sondern man kann das für alle Zellen in einem Schritt machen:
hierbei fällt auch gleich dein nächster Fehler auf:
wenn du Range(Cells(), Cells()) auf ein anderes Tabellenblatt beziehst (Wb), muss das Wb vor den beiden Cells stehen, nicht vor der Range:
Cells ohne Tabellenblattangabe davor refernzieren immer auf das aktive Tabellenblatt und die Cells, die die Range definieren, müssen auf dem gleichen Blatt liegen wie die Range selbst.
also wenn dann ohne Schleife:

Wb.Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).FormulaR1C1 =  "=RC" & Col_K_H & "-RC" & Col_K_R
ich würde auch meine Replace-Methode mit der R1C1-Formelschreibweise kombiniern, dann musst du Spaltennummern austauschen.
Gruß Daniel
Anzeige
AW: Formel mit Variablen angeben
08.10.2021 10:04:17
Christian
Boah, klasse! Es funktioniert, danke!
Ich konnte auch direkt die Division am Ende einfügen und es läuft ohne Probleme.
So sieht nun meine Formel aus:
Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).FormulaR1C1 = "=RC" & Col_K_H & "-RC" & Col_K_R & "/RC" & Col_M
Ich probiere gerade die Formel in die Replace-Schreibweise umzuschreiben, habe nun aber das Problem, dass genau das jetzt extrem unübersichtlich wird. Irgendwo habe ich gerade noch einen Denkfehler...
So ist das ja bestimmt nicht von dir gedacht, oder:
Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula = "=K_H - K_R / M"
Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula = Replace(Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula, "K_H", Cells(Nr, Col_K_H).Address)
Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula = Replace(Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula, "K_R", Cells(Nr, Col_K_R).Address)
Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula = Replace(Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).Formula, "M", Cells(Nr, Col_M).Address)
Grüße
Christian
Anzeige
AW: Formel mit Variablen angeben
08.10.2021 10:17:40
Daniel
Hi
naja, schreib den Text erstmal in eine Variable.
in die Zelle sollte der Text erst, wenn er auch eine korrekte Formel ergibt und das ist in den zwischenschritten ja nicht der Fall.
nach dem ich dir das ja mit der Variable gezeigt hatte, warum machst du das hier anders?
auch hier wirds mit R1C1 in der Regel einfacher:

Dim FO as string
FO = "=RCxxx-RCyyy/RCzzz"
FO = Replace(FO, "xxx", Col_K_H)
FO = Replace(FO; "yyy", Col_K_R)
FO = Replace(FO; "zzz", Col_M)
Wb.Range(Wb.Cells(iRow, lZielspalte), Wb.Cells(2, lZielspalte)).FormulaR1C1 = FO
Gruß Daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige