Hallo,
nein, das liegt daran, dass du hier etwas mit VBA berechnest, was du dann der cells().Formula-Eigenschaft zuweist:
Cells(aktZeile, 39).Formula = ((Cells(aktZeile, Schluss) - (Application.WorksheetFunction.Min(Range(Cells(aktZeile, 4), Cells(Berechnungsanfang, 4))))) / (Application.WorksheetFunction.Max(Range(Cells(aktZeile, 3), Cells(Berechnungsanfang, 3))) - (Application.WorksheetFunction.Min(Range(Cells(aktZeile, 4), Cells(Berechnungsanfang, 4))))) * 100)
Es wird also per VBA das, was auf der rechten Seite des Gleichheitszeichens steht berechnet und das Ergebnis (in dem Fall eine Zahl) in der Cells().Formula-Eigenschaft übergeben. Die Cells().Formula-Eigenschaft ist sehr "großmütig", sie nimmt sowohl Formeltexte, als auch Zahlen an. In jedem Fall versucht sie, das, was ankommt, in als gültige Excel-Formel zu interpretieren. Gelingt diese Interpretation erfolgreich, wird in die Zelle die Formel geschrieben und ihr Wert berechnet. Gelingt die Interpretation nicht, wird eben das von der rechten Seite des Gleichheitszeichens direkt in die Zelle geschrieben.
Deine Zeile sollte also eigentlich
Cells(aktZeile, 39).Value = ....
heißen, weil damit direkt klar wird, dass in den Zellwert eingetragen wird und das alles nichts mit Excelformeln zu tun hat.
Hier
Range(Cells(4, 31), Cells(Rows.Count, 1).End(xlUp).Offset(-1, 30)).FormulaR1C1 = _
"=((RC[-26]-MIN(RC[-27]:R[4]C[-27]))/(MAX(RC[-28]:R[4]C[-28])-MIN(RC[-27]:R[4]C[-27])))*100"
generierst du auf der rechten Seite des Gleichheitszeichens einen String (Buchstaben-zahlenkombination), die eine gültige Excelformel in R1C1-Schreibweise darstellt. Die FormulaR1C1E-eigenschaft ist wie die Formula-Eigenschaft, nur dass sie die Formeln in R1C1-Schreibweise erwartet. Es wird also in die Zelle eine Formel eingetragen. Und der Wert der Formel berechnet.
Du mussst also die "Excel-Übersetzung" selbst vornehmen. Für die im ersten Post gepostete Formel sieht das dann so aus:
Cells(aktZeile, 39).Formula = "=(" & Cells(aktZeile, Schluss).address & _
"-MIN(" & Range(Cells(aktZeile, 4), Cells(Berechnungsanfang, 4)).address & "))/(MAX(" & _
Range(Cells(aktZeile, 3), Cells(Berechnungsanfang, 3)).address & ")-MIN(" & _
Range(Cells(aktZeile, 4), Cells(Berechnungsanfang, 4)).address & "))*100"
Es wird also wieder auf der rechten Seite des Gleichheitszeichens ein String erstellt, der die Formel (in englischer Schreibweise) genau so enthält, wie wenn du sie von Hand eintippst.
Verstehst du?
Grüße, Ulrich
|