Ich verwende Microsoft Office Excel 2007.
Angenommen, ich habe die Nummer 12500000000000.
Dim value1 as long
value1 = CLng(copyrng2.value)
'where copyrng2 is a range (cell) variable containing 12500000000000
Der obige Code schlägt aufgrund eines Überlaufs fehl.
Kann ich diese Zahl in einer beliebigen Excel-Variable (VBA) speichern? Wenn nicht, was kann ich tun, um sie zu speichern, vorzugsweise in einem Format (Integer, Long usw.), mit dem Berechnungen durchgeführt werden können?
Antwort1
Die vorhandene Antwort ist insofern korrekt, als dass Sie dieDoppeltDatentyp. Damit ist das Problem gelöst. Jetzt werde ich einige technische Details einbringen.
Die größte Zahl, die der Datentyp „Double“ speichern kann (und zugleich die größte Zahl, die Excel verarbeiten kann), ist 1,79769313486231570 • 10 308 . Die größte Zahl, die Sie (ohne Formel) in eine Zelle eingeben können, ist jedoch 9,99999999999999 • 10 307 . Beachten Sie, dass Sie bei derart großen Zahlen viel an Genauigkeit verlieren – das Hinzufügen einer vergleichsweise kleinen Zahl zu Dingen dieser Größenordnung hat eine gute Chance, nichts zu bewirken.Gleitkommazahlen können etwas seltsam werden.
Die maximale Größe des Datentyps „Long“ ist im Vergleich zum Bereich von „Double“ ein Tropfen auf dem heißen Stein; eine vorzeichenbehaftete 64-Bit-Ganzzahl kann nur bis 9.223.372.036.854.775.807 gehen. Zumindest geht Ihnen dort garantiert nichts durch Rundungen verloren, solange Sie nur mit ganzen Zahlen arbeiten.
Quellen:Excel-Spezifikationen und -Grenzwerte,Datentypübersicht
Antwort2
Excel kann nur 15 Ziffern speichern. Die größte Zahl ist 99999999999999. Wenn Sie versuchen, eine 16-stellige Zahl einzugeben, wird die letzte Zahl ab der 16. Stelle um 0 gerundet.
Antwort3
Antwort4
Verwenden Sie den Decimal
Variablentyp. Sie können eine Zahl nicht als deklarieren, Decimal
aber Sie können sie in einer Variant
Variablen speichern.
Dim value1 as Variant
value1 = CDec(copyrng2.value)
NOTIZ: Wenn Sie bei den großen Zahlen, mit denen Sie arbeiten (1250000000000), versuchen, eine Dezimalzahl zu speichern, scheint Excel diese Zahl auf 1 Dezimalstelle zu runden.