Wat is het verschil tussen .Text, .Value en .Value2
Er zijn drie manieren om met VBA in Excel om met het object Range de waarde uit een cel uit te lezen. Dit kan met de eigenschappen .Value, .Value2 en .Text. Toch zijn er enkele verschillen tussen deze eigenschappen met elk hun voor- en nadelen.
Range.Value
De eigenschap .Value
is de standaard eigenschap van de functie Range
. Dus als je geen eigenschap achter de functie plaatst, wordt standaard de eigenschap .Value
toegepast.
Kortom: Range("A1").Value = Range("B1").Value
is hetzelfde als Range("A1") = Range("B1")
.
Met behulp van Range.Value
kun je over het algemeen de oorspronkelijke waarde ophalen uit een cel. Wanneer een cel is opgemaakt als Valuta
vindt er een afronding plaats. Dit komt doordat het datatype Valuta
een bereik heeft van -922.337.203.685.477,5808 tot 922.337.203.685.477,5807. Zoals je ziet heeft dit datatype een nauwkeurigheid van 4 cijfers achter de komma.
Stel: We hebben in cel A1 de waarde 1,23456789 met als Getalnotatie “Valuta”. Indien we met Range.Value
de oorspronkelijke waarde uit de betreffende cel ophalen, wordt deze geconverteerd naar een Valuta waarde. De oorspronkelijke waarde van 1,23456789 wordt afgerond naar 1,2346. Wanneer we hiermee werken kunnen er afrondingsfouten ontstaan.
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
Bovenstaande code geeft onderstaand resultaat:
A1: 123,4568
Double precesion: 123,4568
Currency: 123,4568
B1: 123,46
Zoals je kunt zien, wordt de oorspronkelijke waarde afgerond bij het gebruik van Range.Value.
Range.Text
In tegenstelling tot Range.Value, geeft Range.Text de exacte tekstwaarde van een cel terug, ongeacht de celopmaak. Dit betekent dat als je Range.Text gebruikt om de waarde uit cel A1 op te halen, je de oorspronkelijke ongewijzigde waarde van “1,23456789” krijgt, zonder afronding.
Sub Text()
Dim cellText As String
cellText = Range("A1").Text
Debug.Print "A1 Text: " & cellText
End Sub
Bovenstaande VBA-code geeft het volgende resultaat:
A1 Text: 1,23456789
Het gebruik van Range.Text is handig als je de exacte tekstwaarde van een cel nodig hebt, zonder enige opmaak- of conversiebewerkingen.
Range.Value2
Range.Value2 is vergelijkbaar met Range.Value, maar het heeft een belangrijk verschil. Range.Value2 houdt zich niet bezig met de opmaak van een cel en levert altijd de ruwe numerieke waarde van een cel, zonder afronding. Het is sneller dan Range.Value en wordt aanbevolen als je precisie belangrijk is en je geen opmaakwisselingen wilt zien.
Sub Value2()
Dim value2 As Variant
value2 = Range("A1").Value2
Debug.Print "A1 Value2: " & value2
End Sub
Bovenstaande VBA-code geeft het volgende resultaat:
A1 Value2: 1,23456789
Range.Value2 is een goede keuze wanneer je gegevens manipuleert en precisie essentieel is.
Conclusie
Het kiezen tussen .Value, .Value2 en .Text in VBA voor Excel hangt af van je specifieke behoeften. Als je de ruwe numerieke waarde wilt, zonder opmaak of afronding, is Range.Value2 de beste optie. Als je de exacte tekstwaarde nodig hebt, zonder opmaak, gebruik dan Range.Text. Maar wees voorzichtig met Range.Value, omdat het celopmaak en afronding kan bevatten.
Het begrijpen van deze eigenschappen en wanneer ze moeten worden toegepast, zal je helpen om effectiever met Excel-gegevens om te gaan in je VBA-projecten. Kies de eigenschap die het beste past bij je specifieke situatie en vereisten.
Dit delen:
- Klik om te delen met Twitter (Wordt in een nieuw venster geopend)
- Klik om te delen op Facebook (Wordt in een nieuw venster geopend)
- Zoeken
- Klik om dit te e-mailen naar een vriend (Wordt in een nieuw venster geopend)
- Klik om op LinkedIn te delen (Wordt in een nieuw venster geopend)
- Gebruiker (Wordt in een nieuw venster geopend)
- Front-end SEO-inspecteur (Wordt in een nieuw venster geopend)
- Statistieken (Wordt in een nieuw venster geopend)
- Meldingen (Wordt in een nieuw venster geopend)