У меня есть рабочий лист Excel с таблицей, как это:получить максимальное значение из таблицы поиска
Index Threshold
1 0
2 10
3 20
...
Тогда у меня есть другая таблица со значениями:
Values
5
11
14
22
То, что я хочу, чтобы реализовать формулу который отображает «Значения» на максимальный «Индекс», который возможен без превышения «порога», например:
Values Threshold Index
5 -> 0 -> 1
11 -> 10 -> 2
14 -> 10 -> 2
22 -> 20 -> 3
Я думаю, что могу реализовать двоичное дерево IF()
со стоимостью log(n)
, но это очень громоздко и громоздко. Например (T*
пороги, V*
являются значением и I*
являются индексами):
IF(V1 < T3;IF(V1 < T2;I1;I2);IF(V1 < T4;I3;I4))
Это сбалансированное IF()
дерева как:
T3
/ \
T2 T4
/\ /\
I1 I2 I3 I4
Есть ли лучше (более удобный) способ реализации этого ?
Это только суть фактического листа, над которым я работаю. Реальные данные двумерны, распространены на многих страницах и намного больше (сотни порогов и тысяч значений).
Специальная копия & с пастой очень трудно обрабатывать (создавать, тестировать и поддерживать).
EDIT: фактическое решение
Итак, это после некоторого изучения этого вопроса, и я хочу, чтобы показать решение, которое работало для меня. Функция MATCH()
была фундаментальной, но недостаточно.
Прежде всего, пороги не указывают максимально допустимое значение но минимальное требуемое значение. Поэтому заголовок вводит в заблуждение. Что мне нужно было сделать:
- изменить пороговый диапазон;
- использование
MATCH()
-1
сравнение type.
Чтобы изменить диапазон, я использовал эту формулу, занимая клетки в F2:F102
диапазоне:
INDEX(C$2:C$102;COUNTA(C:C)+1-ROW())
Для того, чтобы соответствовать я использовал:
MATCH(D2;F$2:F$102;-1)
Этот последний матч без INDEX()
, потому что возвращается смещение уже то, что мне нужно.
Благодаря Скотту Кранеру за то, что он поставил меня на правильные пути!
Очень приятно! Я просто тестировал его на меньшем наборе данных и, как правило, он работает, но есть ошибки индексирования. Все значения являются целыми числами, и ошибка появляется только при более высоких значениях. Для 'T = 5, V = 4' он дает мне предыдущий индекс' I = 4', а не правильный 'I = 5'. Любая идея, как это может быть? Я не могу просто добавить '+ 1', потому что для более низких значений (' V <4') это правильно. Корректировка его вручную исказила бы нижнюю часть в ошибке :( – pid
Мне пришлось уйти, и я не вернусь в течение нескольких часов, я не понимаю. Если я ставлю '10' в E3, это даст мне 2, если это будет 1 ? –
Нет, 2 правильно. То, с чем я работаю, - это более сложные данные, но я могу управлять им, используя формулу промежуточной коррекции. «MATCH()» - это то, что мне нужно, поэтому этот вопрос принят и сделан! Большое спасибо и не против предыдущего комментария :) – pid