Excel VBA: Erhalten Sie den Wert der Zelle, unabhängig von der Formatierung der Zelle

9

% 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:

  • A1: 0,00001
  • A2: = A1
  • A3: = A1 = A2

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:

  • B1: = f ("A1")
  • B2: = f ("A2")
  • B3: = B1 = B2

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?

    
Joe 04.04.2012, 23:39
quelle

2 Antworten

12

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%     
DJ. 04.04.2012, 23:58
quelle
4

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.

    
brettdj 05.04.2012 01:57
quelle

Tags und Links