Страницы: 1
RSS
Найти нужную позицию в плавающем диапазоне формулами
 
Добрый день.
Пытаюсь сделать формулами аналог vba  Do Until. Наверно надо через ПОИСКПОЗ, ИНДЕКС, но понимания не хватает. Пример в файле
 
Не надо приплетать знания из других областей, Тему назовите нормально, что хотите получить а не то как бы делали не в excel.
Вот этого
апельсины 18 апельсины 19 совсем не понял
Ответ есть, но название темы не подходит под него :-)
Изменено: БМВ - 20.02.2019 12:37:28
По вопросам из тем форума, личку не читаю.
 
Почему не в Excel? Есть же цикл Do Until... Loop в VBA, который действует пока не выполняется заданное условие.
В моем макросе немного другой код, но смысл такой - дойти до следующей заполненной ячейки в первом столбце, затем во втором столбце идти вниз до апельсина, если нашел, то копировать запись в строку с номеров первого столбца.
Пример разумеется условный, но реальные данные выглядят аналогично.
Там где красный текст, должен быть результат работы формулы, которая в каждой ячейке столбца С.
 
Такой изощренный способ:
Код
=ЕСЛИОШИБКА(ЕСЛИ(A1>0;СМЕЩ(B1;ЕСЛИОШИБКА(ЕСЛИ(A1<1;"";ПОИСКПОЗ("*"&"апельсины"&"*";ИНДЕКС($B$1:$B$26;ПОИСКПОЗ(A1;$A$1:$A$26;0)):ИНДЕКС($B$1:$B$26;ЕСЛИ(A1+1>МАКС($A$1:$A$26);СЧЁТЗ($B$1:$B$26);ПОИСКПОЗ(A1+1;$A$1:$A$26;0)));0));"")-1;0);"");"")

 
Спасибо огромное! Сложная, но работающая формула. Действительно изощрённо.
Осталось два момента.
Если поменять на "груши", то на цифре 3 формула ошибочно дает срабатывание.
И, забыл указать вначале, в первом столбце могут быть любые цифры, не обязательно последовательные.
Но эти моменты сам доведу. Еще раз благодарю!
 
=IF(A1<>"";IFERROR(INDEX(B1:$B$18;MATCH("апельсины*";IF(A2<>"";B1;B1:INDEX(B2:$B$18;IFERROR(MATCH(1=1;A2:$A$18<>"";);)));));"");"")
Изменено: БМВ - 20.02.2019 16:58:00 (Файл в следующем сообщении)
По вопросам из тем форума, личку не читаю.
 
Вариант с грушами): (работает со всеми фруктами, даже заморскими)
Код
=ЕСЛИОШИБКА(ЕСЛИ(A1>0;СМЕЩ(B1;ЕСЛИОШИБКА(ЕСЛИ(A1<1;"";ПОИСКПОЗ("*"&"груши"&"*";ИНДЕКС($B$1:$B$26;ПОИСКПОЗ(A1;$A$1:$A$26;0)):ИНДЕКС($B$1:$B$26;ЕСЛИ(A1+1>МАКС($A$1:$A$26);СЧЁТЗ($B$1:$B$26);ПОИСКПОЗ(A1+1;$A$1:$A$26;0)-1));0));"")-1;0);"");"")
Изменено: magistor8 - 20.02.2019 16:20:59
 
БМВ, magistor8, еще раз спасибо!
То, что нужно, а формула массива неожиданно изящная.
Дальше ЕСЛИ с ВПР в формулах не ушел, всё времени не хватает разобраться
 
Еще одна
=IF(A1<>"";IF(MATCH("апельсины*";B1:$B$18;)<=IFERROR(MATCH(1=1;A2:$A$18<>"";);ROW($A$18));INDEX(B1:$B$18;MATCH("апельсины*";B1:$B$18;));"");"")
По вопросам из тем форума, личку не читаю.
 
Спасибо, есть над чем подумать
 
В топочку подкину;)
Код
=ЕСЛИОШИБКА(ИНДЕКС($B$1:$B$26;ПОИСКПОЗ(СТРОКА(A1);ИНДЕКС(ПОИСК("апельс";$B$1:$B$26)*ПРОСМОТР(СТРОКА($A$1:$A$26);СТРОКА($A$1:$A$26)/$A$1:$A$26^0););));"")
 
Akropochev,
Здорово! А зачем в конце "^0"? Как этот момент работает?
Страницы: 1
Наверх