.Value возвращает только 4 десятичных знака значения в формате валюты

У меня есть следующая функция VBA для получения значения валюты откуда-то еще с тем же столбцом, но с другой строкой:

Function GetValue(RefCell As Range) As Double

    Dim i As Integer

    i = Application.Caller.Column - RefCell.Column

    Obtain = RefCell.Offset(0, i).Value

End Function

И вот настройки:

Column1 | Column2
Test 1  | 0.11111
Test 2  | $0.11111

Использование GetValue(Test1) дало мне $0,11111 со всеми 5 знаками после запятой. Однако GetValue(Test2) дает $0,11110 только с первыми 4 десятичными числами. Почему же функция возвращает только 4 десятичных знака, если ввод осуществляется в формате валюты, а не в формате числа? Я хочу получить наиболее точное число со всеми десятичными разрядами из ячеек с форматом валюты - то есть $0,11111, а не 0,11110.

1 ответ

Решение

Свойство Range.Value содержит некоторые особенности региональной валюты; одна из них может иметь точность до 4 цифр (обычно для некоторых типов переменных региональной валюты).

Используйте свойство Range.Value2 для необработанного двойного значения.

GetValue = RefCell.Offset(0, i).Value2

Возвращаемое значение может быть вручную отформатировано как валюта; любая региональная информация была удалена.

Другие вопросы по тегам