Объединенные ячейки смешиваются с INDEX / MATCH
Формула
Скопируйте следующую формулу в ячейку E7
:
=IF(AND($B7<>"",$D7="Par"),IF(ISERROR(MATCH($B7,$B$3:$B5,0)),"Par",INDEX(E$3:E5,MATCH($B7,$B$3:$B5,0))),IF(AND($B6<>"",$D7="Strokes"),IF(ISERROR(MATCH($B6,$B$3:$B4,0)),"Strokes",INDEX(E$3:E4,MATCH($B6,$B$3:$B4,0)+1)),""))
Изображение
Как
Мы создаем формулу в ячейке E7
.
MATCH
Синтаксис: MATCH(lookup_value,lookup_array,match_type)
- Мы будем использовать
MATCH
, чтобы найти положение COURSE1
в приведенном вышеячейки столбца B
. - 1-й аргумент -
lookup_value
, который будет ячейкой в той же строке нашей строки (7
) в столбце B
: B7
, где мы будем блокироватьтолько столбец (мы не будем искать в других столбцах): $B7
. - 2-й аргумент
lookup_array
будет диапазоном.Первой ячейкой будет ячейка B3
, строку и столбец которой мы заблокируем, потому что мы всегда будем начинать поиск с этой ячейки во всех остальных ячейках слева или ниже: $B$3
.Последняя ячейка будет B5
, где мы заблокируем только столбец: $B5
. - И, наконец, мы будем использовать
0
в качестве параметра 3-го аргумента match_type
, чтобы найти точное совпадение. Теперь были готовы написать нашу MATCH
формулу:
=MATCH($B7,$B$3:$B5,0)
, которая вернет 1 , то есть точное (0
) совпадение B7
было найдено в 1-й ячейке диапазона B3:B5
.
- Нам не нужно
1
(E3
), но значение в ячейке (5
).
INDEX
Функция INDEX
имеет 2 синтаксиса, в которых мы будем использовать второй:
Синтаксис 2: INDEX(reference,row_num,column_num,area_num)
Поскольку мы использовали диапазон в один столбец, мы можем смело опускать аргументы row_num
и column_num
, что оставляет нам:
Измененный синтаксис: INDEX(reference,area_num)
- Функция
INDEX
, использованная таким образом, вернет area_num
-ое значение reference
, т.е. в нашем случае, если area_num
равно 1
, она вернет значение 1st
внаш диапазон столбцов, если это 2
, то 2nd
и т. д. - Первый аргумент
reference
будет иметь тот же размер, что и диапазон MATCH
в столбце E
: $E$3:$E5
, где мы удалим блокировки столбцов, поскольку мы также хотим вернуть результаты для других столбцов: E$3:E5
. - 2-й аргумент
area_num
будет нашей MATCH
формулой. Наша текущая формула выглядит следующим образом:
=INDEX(E$3:E5,MATCH($B7,$B$3:$B5,0))
, которая вернетзначение ячейки E3
: 5
.
Окончательные настройки: IF
, AND
и ISERROR
Это было бы почти (проверка ошибок) все, если бы ячейки в столбце B
не были объединены.Поэтому мы должны использовать IF
, чтобы определить, содержит ли строка, в которой мы пишем формулу, Par
или Strokes
и скорректировать нашу созданную формулу для обоих условий:
=IF($D7="Par",INDEX(E$3:E5,MATCH($B7,$B$3:$B5,0))
=IF($D7="Strokes",INDEX(E$3:E4,MATCH($B6,$B$3:$B4,0)+1)
=IF($D7="Par",INDEX(E$3:E5,MATCH($B7,$B$3:$B5,0)),$D7="Strokes",INDEX(E$3:E4,MATCH($B6,$B$3:$B4,0)+1))
и (3-е условие) проверяют в столбце B
, есть ли значение в строке, где мы создаем формулу для строки, содержащей Par
, или строку выше для строки, содержащей Strokes
, используяAND
:
=IF(AND($B7<>"",$D7="Par"),INDEX(E$3:E5,MATCH($B7,$B$3:$B5,0)),IF(AND($B6<>"",$D7="Strokes"),INDEX(E$3:E4,MATCH($B6,$B$3:$B4,0)+1),""))
Наконец, мы должны добавить некоторую проверку ошибок, потому что, если совпадение не было найдено, формула выдаст и #N/A
error:
=IF(AND($B7<>"",$D7="Par"),IF(ISERROR(MATCH($B7,$B$3:$B5,0)),"Par",INDEX(E$3:E5,MATCH($B7,$B$3:$B5,0))),IF(AND($B6<>"",$D7="Strokes"),IF(ISERROR(MATCH($B6,$B$3:$B4,0)),"Strokes",INDEX(E$3:E4,MATCH($B6,$B$3:$B4,0)+1)),""))
Теперь мы готовы скопировать формулу справа и снизу, насколько нам нужно.