Почему ВБ не вимдит числа типа 0,11

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Legachoff
Сообщения: 5
Зарегистрирован: 28 ноя 2005, 17:27

0,1 работает, а 0,11 уже нет почему

Sub ()
Dim r As Double
For r = 0.1 To 0.2
If ActiveSheet.Cells(4, 3).Value() = r Then ActiveSheet.Cells(4, 4).Value() = "ok"
Next r
End Sub
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Во-первых. Если в цикле не указан Step - то он равен 1
Во-вторых. Смысл Вашего цикла от меня ускользает ;)
Написать ОК в соседней ячейке, если значение лежит в диапазоне? Или чего? Разъясните, пожалуйста.
Изображение
Legachoff
Сообщения: 5
Зарегистрирован: 28 ноя 2005, 17:27

Очень просто идет сравнение
если значение ячейки А1 допустим 2 то в В1 например пишет "1 бал"
если значение ячейки А1 допустим 3 то в В1 например пишет "2 бал"
и тд.

это не цикл, это в екселе присуждаеться по значению ранг клиента
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

если это касается только одной ячейки (что вряд ли) я бы забил формулу =ЕСЛИ(...)
если же это условие надо проверить для диапазона ячеек, то я бы делал цикл по диапазону и в нём уже проверял условие на значение
Изображение
Legachoff
Сообщения: 5
Зарегистрирован: 28 ноя 2005, 17:27

Дело в том что проверка в одной ячейке идет по куче критериев, и надо сделать в ВБ
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Парочку критериев в студию - придумаем чего-нить ;)
Изображение
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

VB не знаю, случайно проходил мимо, а потому ногами не пинать.

Код: Выделить всё

Sub ()

If ActiveSheet.Cells(4, 3).Value() >= 0.1 And ActiveSheet.Cells(4, 3).Value() <= 0.2  Then ActiveSheet.Cells(4, 4).Value() = "ok"

End Sub
так не пойдёт?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

0,1 работает, а 0,11 уже нет почему

Sub ()
Dim r As Double
For r = 0.1 To 0.2
If ActiveSheet.Cells(4, 3).Value() = r Then ActiveSheet.Cells(4, 4).Value() = "ok"
Next r
End Sub
Ну, про STEP в операторе FOR Вам уже сказали. Это, видимо, было главной проблемой.

Добавлю еще вот что. Сравнение значений типа Double и Single оператором "=" - это грубая ошибка. Допустим в ячейке которую Вы сравниваете с 0.1 находится формула. Наверняка она даст что-то типа 0.10000000000001 или 0.09999999999999 (ошибка округления в 15-ом значащем разряде). Это число не равно 0.1 и сравнение будет неуспешным.

Ну и напоследок хочу согласиться с Игорем Акопяном, по поводу функции ЕСЛИ. Legachoff, давайте сюда Ваши критерии мы их в 2 счета :)
Ответить