Функция ГПР() отказывается принимать значение полученное с помощью ОКРУГЛВВЕРХ()

Автор Silicium, 08.05.2015, 15:36

« назад - далее »

Silicium

Доброго дня форумчанам.
Возникла у меня такая вот странная проблема...

Функция ГПР() отказывается принимать значение 0,8 в качестве искомого (точнее, видимо просто ничего по нему не находит), если оно полученное с помощью функции ОКРУГЛВВЕРХ(). Тоже значение полученное другими способами принимается. Другие значения полученные с помощью ОКРУГЛВВЕРХ() тоже принимаются.

Формулы на Листе 3, таблица на Листе 5.

vikttur

Странно...
0,61=0,7 (при округлении вверх), значение находится
0,71=0,8 (при округлении вверх), значение не находится.
Получается, что ищем число между 7,999999999999999 и 8,0
=ОКРУГЛ(ОКРУГЛВВЕРХ(0,71;1);1) - так работает...
Причину ошибки не нашел...

Silicium

О, ну хоть решение нашлось)
Сам как-то не догадался. Спасибо!

Хотя конечно, и причину понять интересно бы было...

vikttur

Это не решение - костыль.
Причину бы понять.
прикрепил пример, созданный в чистом файле.

Параллельно задал вопрос об ошибке на Планете
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=65988&TITLE_SEO=65988-oshibka-okrugleniya-okruglvverkh-ili-glyuk-gpr

Prist

Итак, в XML схему записываются значения не те, что отображаются. И выглядят они следующим образом:
Значение в K5:
<f>ROUNDDOWN(M5/N5,1)</f>
<v>0.8</v>

Значение в K6:
<f>ROUNDUP(M6/N6,1)</f>
<v>0.79999999999999993</v>

Значение в K7:
<f>ROUNDUP(E7/F7,1)</f>
<v>0.79999999999999993</v>

Поэтому и не находит. Как правило такие косяки проявляются, если файл был сформирован в программах типа 1С. При этом, если в К6 и К7 формулы заменить значениями и после этого F2+Enter - то все рассчитается корректно.

ВПР как ни странно, ищет данные бинарным типом и почему-то заглядывает внутрь XML значений, а не тех, которые отображаются в ячейках. Почему так - не скажу. Когда-то давно я это уже разбирал и задавал вопрос в тех.поддержку Microsoft - ничего вразумительного не ответили.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

vikttur

В К5 ОКРУГЛВНИЗ, в К6 ОКРУГЛВВЕРХ.
Почему, в таком случае, ОКРУГЛВВЕРХ с 0,6 работает?
ЦитироватьКак правило такие косяки проявляются, если файл был сформирован в программах типа 1С
Мой пример создан с чистого листа.

Prist

Витя, чудеса стандарта IEEE 754.
Для каких-то чисел вычисление пройдет верно, а для каких-то съедет. И как видно из моего предыдущего сообщения - мы попали в этой теме именно на одно из них. Витя, да ты и сам знаешь, что таких пар чисел миллионы.
ЦитироватьМой пример создан с чистого листа.
Верю. Т.к. у тебя проблема точно та же. В ячейке К4 значится:
<f>ROUNDUP(0.71,1)</f>
<v>0.79999999999999993</v>

Значит проблема именно в ОКРУГЛВВЕРХ. Вопрос-то в другом: почему ВПР упорно ищет не то, что отображается в ячейке, а то, что в схеме?

Ну и дабы окончательно убить: попробуй в файле записать 0,61 в ячейку А1. В А2 - формулу вида: =A1+0,1. Протяни ячеек на 20. В столбце В запиши формулу округлвверх. Все поплывет начиная с 0,71. Но. Теперь даже если вручную вбить значения в столбце А - формула все равно будет лажать. В XML схему она не перепрописывает новые значения, пока не прощелкать ячейки с формулами. Вот так вот...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

vikttur

Спасибо.
Глюк.
Начинаю сомневаться в функциях. Ведь ОКРУГЛВВЕРХ должна игнорировать стандарт. Вернее, исправлять его огрехи. Ан нет, не хочет.

zs

Товарищ, vikttur! А что, если общий формат числа 0,79999999 преобразовать формулой
=--ТЕКСТ(A1;"0,##")

vikttur


Czeslaw

Вместо "ОКРУГЛВВЕРХ" можно применииь формулу
=HLOOKUP(CEILING(M6/N6;0,1);Лист5!$R$7:$AA$30;D6;FALSE)