% Co_de% sollte in Excel VBA den zugrunde liegenden Wert des Bereichs A1 auf dem Arbeitsblatt zurückgeben. Aber ich erhalte einen anderen Wert, wenn die Zelle als Buchhaltung formatiert ist.
Wie erhalte ich den tatsächlichen zugrunde liegenden Wert der Zelle?
Arbeitsblatt
Erstellen Sie ein neues Dokument, geben Sie die folgenden Werte in Zellen ein:
Wie Sie erwarten, ergibt sich A3 in Range("A1").Value
. Ändern Sie nun die Formatierung von A2 in das Accounting mit 2 Dezimalstellen. A2 liest nun TRUE
, aber der zugrunde liegende Wert ist immer noch $ 0.00
, also ist A3 immer noch 0.00001
.
VBA
Machen Sie ein neues Modul und fügen Sie die folgende Funktion hinzu:
%Vor% Wie Sie sehen, wird mit der Methode TRUE
des Objekts Value
nur der Wert eines Bereichs abgerufen.
Arbeitsblatt
Zurück zum Arbeitsblatt. Geben Sie die folgenden Werte ein:
Range
und A1
haben denselben zugrunde liegenden Wert, aber A2
und B1
nicht, obwohl beide mit der Methode B2
von Value
und A1
berechnet wurden.
Der Ausdruck in A2
( A3
) greift auf den tatsächlichen zugrunde liegenden Wert von =A1=A2
und A1
zu. Wie greife ich auf diese Werte in VBA zu?
Es ist auch für mich ursprünglich wahr geworden, weil ich die Formatierung hinzugefügt habe, nachdem ich die Formeln eingegeben habe.
Wiederholen - B2 erneut bearbeiten.
Um den zugrunde liegenden Wert zu erhalten, müssen Sie die VALUE2-Eigenschaft verwenden, die die Formatierung zu ignorieren scheint:
%Vor%Das Problem bei der Verwendung von VBA und Value mit währungsformatierten Zellen jenseits von 4 Dezimalstellen wird von diesen Beitrag in Dicks Blog
Wenn Sie in Excel eine Zahl in eine unformatierte Zelle eingeben, lautet diese Nummer im Datentyp Double gespeichert. Wenn Sie diese Nummer formatieren, zeigen Sie an es in einer bestimmten Weise, aber Sie ändern nicht die Nummer. Zum Beispiel, Wenn Sie die Zahl 1 als Kommastil formatieren, erhalten Sie 1,00. Das zugrunde liegende Daten sind immer noch eine 1, Sie zeigen es nur anders. Das Das Datumsformat und das Währungsformat sind zwei Ausnahmen von dieser Regel.
Wenn Sie etwas als Datum oder Währung formatieren, ändern Sie sich tatsächlich der zugrunde liegende Datentyp (des Werts, der in der Value-Eigenschaft gespeichert ist). Wenn es um das Datumsformat geht, ist dies eine Semantik, weil Sie das können Wechseln Sie zwischen den Datentypen Date und Double, ohne Änderungen daran vorzunehmen die Daten. Nicht so sehr beim Datentyp "Währung". Währung nur unterstützt vier Dezimalstellen , so dass Sie ein Double mit sagen wir fünf Dezimalstellen in einen Währungsdatentyp ergeben eine andere Zahl.