Как определить, является ли вариант целым числом в VBA?
Я ищу элегантное решение, чтобы определить, является ли вариант целым числом в VBA. К сожалению, если вариант был создан из строки, я застрял. Вот небольшой тестовый скрипт:
dim v as variant
v = "42"
if v <> round(v) then
msgBox("<>")
end if
здесь появляется msgBox, вероятно, потому, что вариант был создан из строки, хотя я ожидал, что v будет = round(v).
2 ответов
вы должны написать что-то типа:
if cDbl(v) <> round(cDbl(v)) Then
где cDbl-функция, преобразующая любые данные в число двойного типа. Возможно, вам придется обработать случаи, когда v не может быть преобразован в число с помощью функции isNumeric() перед вызовом функции cDbl. Вы даже можете использовать функцию cInt для своих сравнений:
if isnumeric(v) then
if cDbl(v) - cInt(v) <> 0 Then
....
endif
else
debug.print "data cannot be converted to a number"
endif
Sub test()
Dim v As Variant
v = "42"
If Val(v) <> Int(Val(v)) Then
MsgBox ("<>")
End If
End Sub
Если вы используете Val (), он будет стараться изо всех сил преобразовать в число. Если он не может, он вернет ноль, и Val(v) всегда будет равен Int(Val (v)) в этом случае.