Excel: нужна помощь с необычной функцией поиска (отсортированный столбец отличается от столбца поиска) - PullRequest
2 голосов
/ 15 декабря 2009

У меня проблемы с созданием необычной формулы поиска в Excel.

Обычно я бы использовал VLOOKUP (), но ловушкой является то, что я хочу найти число в столбце из таблицы, отсортированной по другому столбцу . Vlookup может выполнять поиск только в самом отсортированном столбце.

Сценарий выглядит следующим образом:

  • Таблица отсортирована по возрастанию в столбце B.
  • Для данного параметра P теперь я хочу найти первое значение A, начиная сверху и снизу, которое больше или равно этому параметру P.
  • Функция должна затем вернуть соответствующее значение B.

Таблица (частично, полная таблица намного больше):

    A      B
1  640    4.5
2  1600   7.0
3  640    7.5
4  1280   12.0
5  1920   16.5
6  2560   21.0
7  1600   19.8
8  3200   26.8
9  4800   33.8

Например, , скажем, мой параметр 1100, тогда я хочу, чтобы моя формула вернула 7.0, потому что первая запись при поиске вниз в столбце А, который больше или равен 1100, это 1600, который имеет соответствующее значение B 7,0

Я попытал счастья с Формула массива (также известная как "формула ctrl-shift-enter") и построил что-то вроде этого:

{=INDEX(table;
        MATCH(MIN(IF(columnA-$C1>=0;columnA;FALSE));
              IF(columnA-$C1>=0;columnA;FALSE);
              0);
        2)}

с C1 , содержащим мой параметр, таблица диапазон A1: B9 и столбец A диапазон B1: B9

Но это не работает (в приведенном выше примере возвращается 12.0, потому что 1280 выбирается функцией MIN ()).

Решение, которое я не хочу использовать: Я мог бы написать какой-нибудь VBA-файл для просмотра таблицы, но я не хочу этого делать (из-за надоедливых «предупреждений о макросах» и из-за того, что Excel на Mac больше не поддерживает VBA)

У кого-нибудь есть подсказки?

Ответы [ 3 ]

4 голосов
/ 15 декабря 2009

Вы можете использовать

{=INDEX(B1:B9,MIN(IF(A1:A9>C1,ROW(A1:A9),FALSE)))}

Обратите внимание, что я использую настройки английского языка в Великобритании - вам придется изменить формулу в соответствии с вашим языком, заменить запятые на точки с запятой и т. Д.

1 голос
/ 15 декабря 2009

Если вам не нужна формула массива, вы можете попробовать = OFFSET ($ C $ 5, MATCH ($ A $ 17, B5: B13), 0) где C5 - начало столбца B, B5: B13 - это вы Столбец и A17 - это ваше значение для сравнения.

Редактирование ниндзя: вот версия, которая работает с битом меньше или , равным вашей спецификации. = OFFSET ($ C $ 5, IF (ISNA (матч ($ A $ 17, B5: B13,0)), IF (ISNA (MATCH ($ A $ 17, B5: B13)), 0, матч ($ 17 $, B5 : B13)), MIN (МАТЧ (17 долл. США, B5: B13,0) -1, МАТЧ (17 долл. США, B5: B13))), 0)

0 голосов
/ 15 декабря 2009

Если предположить, что таблица данных находится в диапазоне A2: B10, со значением, которое вы ищете в ячейке B1, похоже, сработает следующее:

 =IF(B1<A2,B2,IF(ISNA(VLOOKUP(B1,$A$2:$B$10,2,FALSE)),INDEX(B2:B10,MATCH(B1,A2:A10)+1),VLOOKUP(B1,$A$2:$B$10,2,FALSE)))

Я отредактировал это, чтобы учесть, когда значение поиска меньше, чем любое из значений в списке.

...