Excel возвращает несколько частичных совпадений строк в массиве - PullRequest
0 голосов
/ 06 сентября 2018

Задача:

  • Иметь формулу (скорее всего, формулу массива), которая будет возвращать кратные частичные совпадения из столбца / строки.

Параметры:

  • Невозможно использовать INDIRECT, так как он не масштабируется и сломается, если данные перемещены или вставлены
  • Формула должна быть расширяемой с минимальными усилиями (то есть: перетащите угол в направлении, в котором вам нужно развернуть его, чтобы отобразить следующее частичное совпадение)

Примечания:

  • К сожалению, комбинация функций INDEX / MATCH не работает для частичного совпадения строк
  • У меня есть решение, основанное на работе других людей, которое я опубликую ниже, но мне также любопытно, есть ли еще более изящное решение, которого я не вижу. Буду очень признателен за отзывы других людей

Демонстрационное изображение:

An example of what we are trying to accomplish

1 Ответ

0 голосов
/ 06 сентября 2018

В ячейке A2 (см. Прикрепленное изображение из вопроса) я поместил эту формулу:

=IF($E$2="","",IFERROR(INDEX(A$7:A$28,SMALL(IF(ISNUMBER(SEARCH($E$2,A$7:A$28)),ROW(A$7:A$28)-ROW(A$7)+1),ROWS(A$2:A2))),"")), затем нажмите CTRL + SHIFT + ENTER , чтобы ввести формулу в виде формулы массива. Наконец, перетащите эту формулу вниз до A5, а затем перетащите A2:A5 в столбец C.

Если человек хочет вернуть свои результаты по горизонтали, а не по вертикали (как я это сделал), он просто изменит часть формулы ROWS(A$2:A2) на COLUMNS(A$2:A2) и перетянет в сторону соответствующее количество столбцов.

Первоначальная идея для этого решения была от Барри Гудини в качестве ответа на этот вопрос .

Как работает эта формула:

  1. Оценивает, является ли поле условия поиска (E2 для этого примера) пустым, если оно есть, оно также сохраняет пустую ячейку результата. В этом примере он не пустой и начинает вычисление.
  2. Затем он ищет наш поисковый запрос (в нашем примере это «ke»), используя функцию SEARCH. Возвращает массив сообщений об ошибках и (для любых совпадений) номеров их позиций в сетке.
  3. Затем, используя функцию ISNUMBER, он преобразует значения в массиве в «ЛОЖЬ» и «ИСТИНА» в зависимости от того, что SEARCH вернуло на предыдущем шаге. В нашем примере эта ячейка будет возвращать «ИСТИНА» в третьей позиции массива.
  4. Поскольку в нашей функции IF есть ответ "ИСТИНА", мы теперь оценим, что вернуть для этого конкретного места в массиве. Секция ROW(A$7:A$28)-ROW(A$7)+1 преобразует все абсолютные значения строки нашего массива в относительные значения, основанные на начальном местоположении нашего массива.
  5. Внутри нашей SMALL функции теперь у нас есть массив, содержащий «FALSE» и любые относительные позиции совпадений (в данном примере «3»).
  6. Следующий шаг оценки - это наш «n-й счетчик» в конце нашей формулы. Поскольку мы находимся в позиции, которая выдаст наш первый результат (A2), он вернет число «1».
  7. Наша функция SMALL оценивает и возвращает первый наименьший результат («FALSE» исключается, а возвращаемое число равно 3 из шага 5).
  8. Наша функция INDEX теперь оценивает и возвращает ячейку в третьей позиции массива A$7:A$28, которая называется "Микки Маус".
...