Was ist der Unterschied zwischen .Text, .Value und .Value2?

Was ist der Unterschied zwischen .Text, .Value und .Value2?

15. November 2023 0 Von Björn Meijer

Es gibt drei Möglichkeiten, den Wert aus einer Zelle mit VBA in Excel mithilfe des Range-Objekts zu lesen. Dies kann über die Eigenschaften erfolgen .Wert, .Wert2 und .Text. Es gibt jedoch einige Unterschiede zwischen diesen Eigenschaften, die jeweils ihre eigenen Vor- und Nachteile haben.

Bereich.Wert

Die Eigenschaft .Wert ist die Standardeigenschaft der Funktion Reichweite. Wenn Sie also nach der Funktion keine Eigenschaft einfügen, wird standardmäßig die Eigenschaft verwendet .Wert angewandt.
Zusamenfassend: Bereich("A1").Wert = Bereich("B1").Wert ist das gleiche wie Bereich("A1") = Bereich("B1").

Benutzen Bereich.Wert Sie können im Allgemeinen den ursprünglichen Wert aus einer Zelle abrufen. Wenn eine Zelle formatiert ist als Währungen es erfolgt eine Abrundung. Dies liegt am Datentyp Währungen hat einen Bereich von -922.337.203.685.477,5808 bis 922.337.203.685.477,5807. Wie Sie sehen, hat dieser Datentyp eine Genauigkeit von 4 Dezimalstellen.

Angenommen: In Zelle A1 haben wir den Wert 1,23456789 mit dem Zahlenformat „Währung“. Wenn wir mit Bereich.Wert Wenn Sie den ursprünglichen Wert aus der entsprechenden Zelle abrufen, wird dieser in einen Währungswert umgewandelt. Der ursprüngliche Wert von 1,23456789 wird auf 1,2346 gerundet. Wenn wir damit arbeiten, kann es zu Rundungsfehlern kommen.

Sub Value() Dim varCurrency As Currency varCurrency = Range("A1").Value Debug.Print "A1: " & Range("A1").Value Debug.Print "Double precesion: " & CDbl(Range("A1" ).Value) varCurrency = CCur(varCurrency) Debug.Print "Currency: " & varCurrency Range("B1").Value = varCurrency Debug.Print "B1: " & Range("B1").Value End Sub

Der obige Code liefert das folgende Ergebnis:

A1: 123,4568 Doppelte Genauigkeit: 123,4568 Währung: 123,4568 B1: 123,46

Wie Sie sehen, wird der ursprüngliche Wert bei Verwendung von Range.Value gerundet.

Bereich.Text

Im Gegensatz zu Range.Value gibt Range.Text unabhängig von der Zellformatierung den genauen Textwert einer Zelle zurück. Das heißt, wenn Sie Range.Text verwenden, um den Wert aus Zelle A1 abzurufen, erhalten Sie den ursprünglichen unveränderten Wert „1,23456789“ ohne Rundung.

Sub Text() Dim cellText As String cellText = Range("A1").Text Debug.Print "A1 Text: " & cellText End Sub

Der obige VBA-Code liefert das folgende Ergebnis:

A1-Text: 1.23456789

Die Verwendung von Range.Text ist nützlich, wenn Sie den genauen Textwert einer Zelle ohne Formatierungs- oder Konvertierungsvorgänge benötigen.

Bereich.Wert2

Range.Value2 ähnelt Range.Value, weist jedoch einen wichtigen Unterschied auf. Range.Value2 befasst sich nicht mit der Formatierung einer Zelle und gibt immer den rohen numerischen Wert einer Zelle ohne Rundung zurück. Es ist schneller als Range.Value und wird empfohlen, wenn Ihre Präzision wichtig ist und Sie keine Formatierungsänderungen sehen möchten.

Sub Value2() Dim value2 As Variant value2 = Range("A1").Value2 Debug.Print "A1 Value2: " & value2 End Sub

Der obige VBA-Code liefert das folgende Ergebnis:

A1 Wert2: 1,23456789

Range.Value2 ist eine gute Wahl, wenn Sie Daten manipulieren und Präzision wichtig ist.

Abschluss

Die Wahl zwischen .Value, .Value2 und .Text in VBA für Excel hängt von Ihren spezifischen Anforderungen ab. Wenn Sie den rohen numerischen Wert ohne Formatierung oder Rundung wünschen, ist Range.Value2 die beste Option. Wenn Sie den genauen Textwert ohne Formatierung benötigen, verwenden Sie Range.Text. Seien Sie jedoch vorsichtig mit Range.Value, da es Zellformatierungen und Rundungen enthalten kann.

Wenn Sie diese Eigenschaften verstehen und wissen, wann Sie sie anwenden müssen, können Sie Excel-Daten in Ihren VBA-Projekten effektiver verarbeiten. Wählen Sie die Funktion, die am besten zu Ihrer spezifischen Situation und Ihren Anforderungen passt.