Clever-Excel-Forum

Normale Version: VBA: FormulaR1C1 wechseln zu FormulaLocal
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

nach vielen Monaten mal wieder ein Beitrag (mit einer Frage) von mir:

Wie kann ich die folgende R1C1-Formel in Local ändern?
Also, ich möchte die Original-Formel mit WENNFEHLER abfangen, wie muß ich das formulieren?
Code:
                Cells(k, 7).FormulaR1C1 = "=IFERROR(RC[-2]/RC[-3]*100,0)"
'original                Cells(k, 7).FormulaLocal = "=E" & k & "/D" & k & "*100"
                Cells(k, 8).FormulaR1C1 = "=IFERROR(RC[-2]/RC[-4],0)"
'original                Cells(k, 8).FormulaLocal = "=F" & k & "/D" & k
Wenn ich es so mache, kommt der "'NAME?"-Fehler:
Cells(k, 7).FormulaLocal = "=IFERROR(E" & k & "/D" & k & "*100 ,0)"

Ich bitte um Hilfe.

Gruß Ralf
Hi,

FormulaLocal ist keine wirklich gute Idee. Es sei denn, Du bist Dir sicher, dass Dein Programm tatsächlich nur in Deinem Land benutzt wird.

Wenn Dein Land = D ist, dann musst Du bei FormulaLocal natürlich auch die deutschen Funktionsbezeichnungen verwenden.

Bsp.: Cells(1,1).FormulaLocal = "=Summe(B2:V6)"

also Summe statt Sum und Semikolon statt Komma als Parameterseparator.

Besser ist es, Du verwendest Formula. Das funktioniert international und Du kannst die englischen Funktionsbezeichnungen verwenden.
RC (Row, Column, also Zeile/Spalte) musst Du halt durch die tatsächlich gewünschten Adressen ersetzen. Relative und absolute Bezüge dabei beachten.

Das
Code:
Cells(k, 7).FormulaLocal = "=IFERROR(E" & k & "/D" & k & "*100 ,0)"
kann nicht funktionieren, weil Du keinen Bereich definierst.
musst Du so ersetzen:
Code:
Cells(k, 7).Formula = "=IFERROR(" & cells(7,k-2).address  & "/" & cells(4,k).address & " *100 ,0)"
also, cells(7,k-2) entspricht der Zelle in Zeile 7 und der durch k definierten Spalte 2 nach links daneben. Alles klar? :)
Hallo Ralf (RaBe),

ich kann Deinen Fehler nicht nachvollziehen. Wenn man k=5 setzt, dann sind in G5 und H5 die Formeln so:


Code:
=E5/D5*100
=F5/D5


Also liegt es wohl nicht an einer falschen Umsetzung der Formel.
mit WENNFHLER dann so:

Code:
Cells(k, 7).FormulaLocal = "=Wennfehler(E" & k & "/D" & k & "%;"""")"
Cells(k, 8).FormulaLocal = "=Wennfehler(F" & k & "/D" & k & ";"""")"
Hallo Edgar,

ja, das ist das, was momentan drin steht.
Ich will aber ein DIV/NULL abfangen durch WENNFEHLER(...)

Also nochmal, ausführlicher erklärt:

Die Originalformel in der Zelle durch die Makrozeile:
Cells(k, 7).FormulaLocal = "=E" & k & "/D" & k & "*100"
war
=E5/D5*100


In der Zelle soll nach dem Makrolauf drin stehen:
=WENNFEHLER(E5/D5*100;0)
dazugehörige, funktionierende Makroformel mit R1C1 (aufgezeichnet):
Cells(k, 7).FormulaR1C1 = "=IFERROR(RC[-2]/RC[-3]*100,0)"

Wie lautet die entsprechende Local-Formel?

Gruß Ralf



Aaah, jetzt hast Du nochmal geändert. Ja, so geht es.

Danke.
Hallo Ralf,

  Cells(k, 7).Formula = "=IFERROR(E" & k & "/D" & k & "*100 ,0)"
oder
  Cells(k, 7).FormulaLocal = "=WENNFEHLER(E" & k & "/D" & k & "*100 ;0)"

Ergänzung zum Herausfinden der richtigen Syntax:
Code:
Sub aab()
  With ActiveCell
    Debug.Print .Formula
    Debug.Print .FormulaLocal
    Debug.Print .FormulaR1C1
    Debug.Print .FormulaR1C1Local
  End With
End Sub

Gruß Uwe
Du arbeitest mit VBA, dann verwende VBA, statt Excel:

Code:
if cells(k,4)<>0 then cells(k,7)=cells(k,5)/cells(k,4)*100
Hi,

es ist aber etwas völlig anderes, ob eine Formel oder eine Zahl in einer Zelle steht.