Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Еще интересное обнаружил. Val() в VBA берет из текста все числовые знаки слева до первого нечислового символа. Val("0,00003") = 0 Val(0.00003) = 0 Но! Val("3d-5") = 0,00003 Val("3e-5") = 0,00003
В коде єкспоненциальная запись сразу преобразуется в число.
Текст сначала преобразуется в число. Число целое. Val(целое) = целое Но если это же "число" (0,3d2) взять из ячейки, то Val(...)= 0. Здесь явно видно, что сначала обрезание, потом преобразование преобразовывать нечего
Приветствую, Виктор! Это если у Вас в региональных настройках разделителем дробной доли является запятая. Аргументом функции VBA.Val является текст. Число 0.0003 будет преобразовано в текст согласно региональным настройкам и скормлено функции Val. Поэтому в условиях, указанных выше, выражение будет преобразовано в
Val("0,00003")
Val специфическая функция - она, в том числе, игнорирует региональные настройки. Точку Val всегда воспринимает как разделитель дробной доли. На запятой она в этом случае останавливается и возвращает 0. Опять же, классические разъяснения от любимого автора.
мда…Excel не перестаёт фокусничать, а то что на скрине (от Владимира ZVI) вообще треш, конечно — что хочу, то и ворочу для меня это, безусловно, проблема и баг, нежели фича, т.к. теперь придётся дополнительные проверки вводить спасибо за разъяснения!
UPD: к счастью, решается с помощью простой и быстрой проверки
Код
If IsNumeric(x)
If x<>--x Then MsgBox "Текст-Как-Число"
End If
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Здравствуйте, Алексей! Excel c таким поведением буквы d (D) не знаком, он по своей инициативе не будет преобразовывать в число текст вида 2d2. Это всё относится только к VBA. Когда Вы в #1 вычисляете IsNumeric(x) для текста x, то Вы выясняете (у VBA), может ли текст x быть преобразован в число в соответствии с региональными настройками данной системы Windows. Вот тут VBA и сообщает, что текст "2d2" может быть преобразован в число. Функции преобразования типов (Val, Cdbl, Csng, Ccur...) также знают про "d". См. также исследования коллеги в #4.
sokol92, приветствую, Владимир! Это проблема, поскольку в данных такие фрагменты "текста-как-чисел" содержатся, но обработаться должны как текст, а не число
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄