Как использовать функцию VLOOKUP для столбца, значение которого генерируется из двух других столбцов - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу заполнить эту формулу, но этот уровень вложенного цикла недопустим ...

=IF(D2<101,"27.50",IF(D2<151,"21.34",IF(D2<201,"26.07",IF(D2<251,"29.81",IF(D2<301,"34.54",IF(D2<351,"39.27",IF(D2<401,"44.00",IF(D2<451,"49.72",IF(D2<501,"56.87",IF(D2<551,"61.60",IF(D2<601,"66.33",IF(D2<651,"71.06",IF(D2<701,"75.90",IF(D2<751,"80.63",IF(D2<801,"85.36",IF(D2<851,"87.67",IF(D2<901,"90.97",IF(D2<951,"92.40","97.90"))))))))))))))))))

, где D2 рассчитывается как =(A2+B2)/2

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете использовать INDEX(MATCH()) для решения вашей проблемы, но порядок массива поиска должен быть убывающим, и ваши пределы должны быть +1, так как он работает в форме, большей или равной форме, поэтому, если это таблица поиска:

A   B
252 29.81
202 26.07
152 21.34
102 27.5

Это будет формула:

=INDEX($B$1:$B$4,MATCH(D2,$A$1:$A$4,-1))
0 голосов
/ 20 декабря 2018

Лучший способ добиться этого - использовать таблицу поиска в качестве промежуточной точки, либо где-нибудь на листе, либо в скрытых ячейках / листе, если предпочтительнее.

Таблица будет выглядеть примерно так:

|-----|-------|
| 101 | 27.5  |
|-----|-------|
| 151 | 21.34 |
|-----|-------|
| 201 | 26.07 |
|-----|-------|
 etc...

Затем вы можете использовать поиск, чтобы найти значение на основе условия, скажем, эта таблица находится в Sheet2!A1:B3:

=IFERROR(INDEX(Sheet2!$B$1:$B$3,SMALL(IF($D$2<Sheet2!$A$1:$A$3,ROW(Sheet2!$A$1:$A$3)-ROW(Sheet2!$A$1)+1),1)),"97.90") - введено как формула массива( Ctrl + Shift + Ввод )

INDEX(Sheet2!$B$1:$B$3, - Создать 1 основанный индекс (индекс, начинающийся с 1) для B1: B3

IF($D$2<Sheet2!$A$1:$A$3,ROW(Sheet2!$A$1:$A$3)-ROW(Sheet2!$A$1)+1 - Возвращает ссылку на позицию всех элементов в A1: A3, которые больше, чем D2, в виде массива (принимая номер строки минус номер строки первой строки плюс 1)

SMALL([If()],1) - Возвращает первый, наименьший номер строки из массива, который INDEX() затем ищет

IFERROR([Index(Small(If()))],"97.90") - Поскольку любое число, превышающее наибольшее число в таблице, дастошибка, затем вместо этого выведите «97,90»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...