Страницы: 1
RSS
Не работает "Быстрый ВПР"
 
Подскажите пожалуйста, почему не работает вариант быстрого ВПР из темы
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=37916
Код
=ЕСЛИ(ВПР($C$1;$A$1:$B$10000;1;ИСТИНА)=$C$1;ВПР($C$1;$A$1:$B$10000;2;ИСТИНА);НД())  

Приложил файл с примером.
В файле пример с десятком строк, в оригинале 1 млн строк.  
Изменено: sl14 - 30.11.2019 12:10:58
 
может стоит отказаться от быстрого ВПР в пользу обычного?
Код
=ВПР(RC[-1];id!C[-1]:C;2;)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
в оригинале 1 млн строк, обычным ВПР + ЛОЖЬ будет час прогонять.  
 
sl14, кнопка цитирования не для ответа!
 
Цитата
sl14 написал:
ВПР + ЛОЖЬ будет час прогонять.
Вы проверяли или так думаете? 1 млн это данных или столько раз нужно использовать формулу?  
По вопросам из тем форума, личку не читаю.
 
БМВ, в таблице данных 200 тыс строк, а формулу нужно использовать 1 млн строк
 
Цитата
sl14 написал:
ВПР + ЛОЖЬ будет час прогонять.  
ВПР не гонит ложь, а показывает найденное значение или #Н/Д, которое ничуть не хуже #Н/Д возвращенного вашей формулой и элементарно гасится ЕСЛИОШИБКА, с помощью которой вместо #Н/Д можете написать Х/З, например

и... 1 млн. формул. как разовая акция вполне допустимо посчитать, но держать в файле млн. формул и пользоваться этим файлом - это чревато постоянными нервными срывами из-за скорости работы с такой книгой, оно вам нужно?
Изменено: Ігор Гончаренко - 30.11.2019 17:45:58
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, если я не укажу в ВПР "ЛОЖЬ", мне подкинет рандомные значения. А мне нужны точные.

Я использую
Код
=ВПР(RC[-1];id!C[-1]:C;2;ЛОЖЬ)
НД значений нет, т.к. в таблице с данными присутствуют все значения.

Если я буду использовать =ВПР(RC[-1];id!C[-1]:C;2;) или то же самое =ВПР(RC[-1];id!C[-1]:C;2;ИСТИНА), у меня подкинет похожее, не точное значение.
Если воспользуюсь конструкцией ЕСЛИ ВПР, не указав ИСТИНА
Код
=ЕСЛИ(ВПР($C$1;$A$1:$B$10000;1;)=$C$1;ВПР($C$1;$A$1:$B$10000;2;);НД())  

Отдача и скорость такая же как и ВПР с ЛОЖЬ

Для теста запустил сейчас, 50% уже 40 минут
Изменено: sl14 - 30.11.2019 20:30:21
 
см. сообщение #2, там формально не указана "ЛОЖЬ", без которой вам никак, а что она не так считает?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, ВПР без указания ИСТИНА/ЛОЖЬ, по умолчанию использует ИСТИНА

ИСТИНА - приблизительные значения
ЛОЖЬ - точные значения

Мне нужны точные.
 
откройте глазки, и посмотрите в формулу в сообщении #2
что этот ВПР считает не так? вам нужны точные данные, а там КАКИЕ???

и опять, что за "быстрый ВПР"? если в Excel нет ни быстрого ни медленного, а есть просто ВПР
Изменено: Ігор Гончаренко - 30.11.2019 19:10:23
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Я Вам объясняю, что в формуле из вашего сообщения во втором после, Вы не указали параметр интервального просмотра, по умолчанию если не указан параметр, используется ИСТИНА - приблизительное значение.

В оригинальной таблице где 1 млн строк, ИСТИНА показывает не точные значения. Очень много похожих парт номеров типа,49016-1129 и 49016-1137 поэтому функция возвращает не точные значения.

Цитата
  • При желании вы можете указать слово ИСТИНА, если вам достаточно приблизительного совпадения, или слово ЛОЖЬ, если вам требуется точное совпадение возвращаемого значения. Если вы ничего не указываете, по умолчанию всегда подразумевается вариант ИСТИНА, то есть приблизительное совпадение.
Изменено: sl14 - 30.11.2019 19:09:18
 
3-й раз отвечаю:
- я - указал см. #2
Цитата
Ігор Гончаренко написал:
посмотрите в формулу в сообщении #2
Цитата
Ігор Гончаренко написал:
см. сообщение #2, там формально не указана "ЛОЖЬ"
- Excel его видит и считает (проверте в файле)
- не видите (не понимаете) только вы
ключевое слово тут "формально не указана", а фактически есть (самого слова Ложь нет, а параметр равный ЛОЖЬ есть)
Цитата
Ігор Гончаренко написал:
=ВПР(RC[-1];id!C[-1]:C;2;)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, вы серьёзно?

=ВПР(RC[-1];id!C[-1]:C;2;)
в данной формуле не указан последний параметр, т.е. параметр интервального.

Читаем на сайте майкрософта о данном параметре:
Цитата
При желании вы можете указать слово ИСТИНА, если вам достаточно приблизительного совпадения, или слово ЛОЖЬ, если вам требуется точное совпадение возвращаемого значения. Если вы ничего не указываете, по умолчанию всегда подразумевается вариант ИСТИНА, то есть приблизительное совпадение.
ЧИТАЕМ: Если вы ничего не указываете, по умолчанию всегда подразумевается вариант ИСТИНА, то есть приблизительное совпадение.
ЗДЕСЬ:
Код
 =ВПР(RC[-1];id!C[-1]:C;2;) 
НЕ УКАЗАН, ЗНАЧИТ... Если вы ничего не указываете, по умолчанию всегда подразумевается вариант ИСТИНА, то есть приблизительное совпадение.
 
Цитата
Если на клетке слона прочтешь надпись: буйвол, — не верь глазам своим
Бессмысленно спорить, если проверка занимает несколько секунд. Берем файл из #2 и ...
Изменено: sokol92 - 30.11.2019 20:31:26
Владимир
 
я - серьезно
4-й раз предлагаю вам открыть файл пример из сообщения #2, посмотреть в формулу посмотреть и главное ПРОАНАЛИЗИРОВАТЬ почему там такие результаты
да, именно так:
=ВПР(RC[-1];id!C[-1]:C;2;)
не указан выглядит так:
=ВПР(RC[-1];id!C[-1]:C;2)
(найдите 10 отличий)
Изменено: Ігор Гончаренко - 30.11.2019 20:45:37
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
sl14, то, что Вы неправильно понимаете написанное в справке, не значит, что написано неправильно )
Цитата
НЕ УКАЗАН, ЗНАЧИТ...
Указываем и пишем:
=ВПР(что;где;столбец;0) или ЛОЖЬ
=ВПР(что;где;столбец;1) или ИСТИНА
Указываем, но не пишем (то же, что 0 или ЛОЖЬ):
=ВПР(что;где;столбец;)
Не указываем и, естественно, не пишем (то же, что 1 или ИСТИНА):
=ВПР(что;где;столбец)
Так понятнее?

============================================================­==
Цитата
sl14 написал: вариант быстрого ВПР...
ВПР... ИСТИНА у меня подкинет похожее, не точное значение
Нужно понимать, почему ВПР с параметром ИСТИНА названа быстрой.

=ВПР(что;$A$1:$B$1000000;2;ЛОЖЬ) ищет точное совпадение, но при этом перебирает ячейки последовательно, по одной, пока не найдет точное совпадение. И если искомого в диапазоне нет, будут просмотрены все ячейки диапазона (в данном примере - миллион итераций)
=ВПР(что;$A$1:$B$1000000;2;ИСТИНА) ищет похожее значение в отсортированном диапазоне. Если диапазон несортирован, применять ВПР с приблизительным соответствием нельзя.

А вот почему только в отсортированном и почему такая конструкция быстрая? Да потому, что поиск происходит совсем не так, как в первом случае.
Делим диапазон посередине. Если верхняя граница нижней части больше искомого значения, делим нижнюю часть посердине, верхняя игнорируется (в противном случае берем для работы верхнюю половину)... и.т.д. Для диапазона в миллион строк имеем не более 20 итераций (2^20  = 1048576)
Сравниваем количество с первым вариантом (точное совпадение)  и понимаем, почему назвали вариант быстрым.

Вывод. При сортированных данных и при наличии искомого в этом диапазоне поиск происходит бывстрее в сотни/тысячи раз (в зависимости от размера диапазона).
Страницы: 1
Наверх