Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1116to1120
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

Dezimalzahl in FormulaR1C1

Dezimalzahl in FormulaR1C1
Mario
Hallo!
Ich würde gerne eine Formel mit einer Konstanten in mehrere Zelle schreiben.
Die Konstante kann eine Dezimalzahl sein. Hier mein Code
Dim Preis 'As Double
Dim Gewicht ' As Double
Dim i As Byte
'
Preis = 1245.5
Gewicht = 15.45
' Spalte A == Anzahl
For i = 1 To 10
With ActiveSheet
.Cells(i, 2).FormulaR1C1 = "=RC[-1]*" & Preis
.Cells(i, 3).FormulaR1C1 = "=RC[-2]*" & Gewicht
End With
Next i
Kann mir jemand sagen, wieso das nicht funktioniert wenn meine Konstante eine Dezimalzahl ist? Bei einer ganzen Zahl geht es.
hab schon CStr(Preis) und CStr(Gewicht) probiert - geht nicht.
Verschiedene Variablendeklarationen (Currency, Long usw) haben auch nicht funktioniert - wo liegt mein Denkfehler?
Vielen Dank für die Hilfe!
Mario

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

Betreff
Benutzer
Anzeige
AW: Dezimalzahl in FormulaR1C1
18.11.2009 11:29:28
IngGi
Hallo Mario,
in VBA musst du den amerikanischen Dezimalpunkt an Stelle des deutschen Dezimalkommas verwenden. Oder du verwendest FormulaR1C1Local, dann gelten für die Formel die Regionaleinstellungen von Excel, bzw. des Betriebssystems.
Gruß Ingolf
AW: Dezimalzahl in FormulaR1C1
18.11.2009 11:39:59
Mario
Hallo Ingolf,
danke für die schnelle Antwort.
Wenn ich den Code mit FormulaR1C1Local wie folgt (siehe unten) abändere bringt er mir trotzdem Laufzeitfehler 1004 in Zeile 50.
Ändere ich 1245.5 mit einem Komma in 1245,5 bringt er mir einen Kompilierungsfehler in Zeile 10.
Ich habe schon anstelle des Kommas einen Punkt verwendet.
Zur Info: Die Mappe soll später in verschiedenen Ländern (also Betriebssystemsprachen) laufen.
VBA (bzw. ich ;-) hab an der Stelle einfach ein Problem mit Dezimalzahlen.
Noch eine Idee wie der Code abzuändern ist?
Gruß
Mario
10 Preis = 1245.5
20 Gewicht = 15.5
30 For i = 1 To 10
40 With ActiveSheet
50 .Cells(i, 4).FormulaR1C1Local = "=RC[-1]*" & Preis
60 .Cells(i, 5).FormulaR1C1Local = "=RC[-2]*" & Gewicht
70 End With
80 Next i
Anzeige
AW: Dezimalzahl in FormulaR1C1
18.11.2009 12:01:59
Björn
Hallo,
die variable als String definieren, zur Not über Hilfsvariable.
Bei Zuweisen der Formel dann das local weglassen.
Z.B. so:
Dim preis as string
preis = "1234.5"
ActiveSheet.Cells(1, 2).FormulaR1C1 = "=RC[-1]*" & Preis
Gruß
Björn
Das ist ja wohl ein Scherz!
18.11.2009 12:13:10
Mario
So sehr ich mich auch vor den Entwicklern von Excel verbeuge - machne Sachen sind absolut nicht nachvollziehbar... bzw. sehr umständlich...
Folgender Code funktioniert:
Dim Preis 'As String 'As Double
Dim Gewicht ' As Double
Dim i As Integer
'
10 Preis = 1298.454545
20 Gewicht = 15.4546
30 Preis = Replace(Preis, ",", ".")
40 Gewicht = Replace(Gewicht, ",", ".")
50 For i = 1 To 10
60 With ActiveSheet
70 .Cells(i, 4).FormulaR1C1 = "=RC[-1]*" & Preis
80 .Cells(i, 5).FormulaR1C1 = "=RC[-2]*" & Gewicht
90 End With
100 Next i
@Björn B: danke für den Hinweis. In meinem speziellen Fall wird die Kontante aus einer Datenbank gezogen.
Anzeige
AW: Das ist ja wohl ein Scherz!
18.11.2009 23:32:03
Daniel
Hi
da schlägt ein bisschen die Sprachverwirrung in VBA und Excel zu und dein etwas nachlässiger Umgang mit den verschiedenen Datentypen STRING und DOUBLE sowie deren Umwandlung.
die Markros schreibst du in VBA und das spricht englich, also musst du im Code den Dezimalpunkt verwenden.
Wenn du jetzt aber einer Variablen eine Zahl zugewiesen hast, dann wird diese vom Deutschen Excelkern verwaltet und hat jetzt das Komma als Dezimalzeichen.
Wenn du jetzt diese Zahl wieder in einen String umwandelst, dann wird auch das Komma in den String übernommen (Excel spricht ja deutsch mit dir).
Allerdings kannst du jetzt diesen String nicht in der VBA-Programmierung verwenden, da du in VBA ja den Englischen Punkt brauchst.
Also hilft dir nur die Replace-Funktion.
Gruß, Daniel
Anzeige
AW: Das ist ja wohl ein Scherz!
19.11.2009 17:09:21
Mario
Hi Daniel,
sowas in die Richtung hab ich mir ja schon gedacht. Mein "nachlässiger" Umgang war auskommentiert (siehe Hochkomma - war ein Test...) somit verwendet VBA den Typ Variant und sucht sich den Datentyp selbst. Tut also nix zur Sache.
Finde die Lösung trotzdem bescheuert. Das bedeutet nämlich, dass wenn ich den Code auf nem englischen Rechner schreibe und eventuell auf einem deutschen ausführen will, es zu einem Fehler kommt.
Das darf meiner Meinung nicht passieren. Die Zeile 30+40 muss Excel meines Erachtens selbst erledigen insbesondere wenn "Preis" und "Gewicht" als Dezimalvariablen deklariert sind (As Double).
Beste Grüsse
Mario
Anzeige
AW: Das ist ja wohl ein Scherz!
21.11.2009 14:33:15
Daniel
Hi
naja, die verwendung von VARIANT ist meiner ansicht nach nachlässiger Umgang mit den Variablentypen, außerdem ist oft nicht notwendig, VARIANT zu verwenden, da VBA sowieso das kombinieren verschiedener Datentypen zulässt, falls es möglich ist (dh. VBA selbst ist in dieser Beziehung nachlässig)
der Vorteil ist allerdings, daß die Programmierung in vielen Fällen einfacher wird, da man selbst nicht umwandeln muss.
nochmal zum Problem:
mit der Replace-Methode sollte es beim Einsatz in verschiedenen Sprachversionen kein Problem geben.
arbeitest du mit der deutschen Variante, wird das Komma in einen Punkt gewandelt, verwendest du die englische version, dann hast du den Punkt ja sowieso drin und die Replace-Funktion läuft halt durch, ohne was machen zu müssen.
gruß, Daniel
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige