
Это отчасти ради развлечения, и я надеюсь, что дискуссия не будет закрыта по причине субъективности, поскольку, хотя вопрос «какое решение наиболее элегантно» является субъективным, то «текущее решение запутанное и уродливое» очевидно для всех.
В любом случае, у меня есть список на листе 1, вот такой:
*Thing* *type of thing*
Apple
Orange
Larceny
Cake
Banana
Murder
а на листе 2 так:
fruit confectionary crime
Apple x
Orange x
Larceny x
Cake x
Banana x
Murder x
и я хочу вернуть столбец B на листе 1 вот так
*Thing* *type of thing*
Apple fruit
Orange fruit
Larceny crime
Cake confectinary
Banana fruit
Murder crime
Я опубликую свое текущее решение в качестве ответа. Оно работает, я так и сделаю...
Как бы вы подошли к решению этой проблемы?
решение1
Вот мое решение. Индекс+соответствие можно использовать для поиска значений в таблице в обоих направлениях. Это подстраивает обычное решение так, что оно найдет x и вернет заголовок столбца.
=INDEX($E$1:$G$1,MATCH("x",OFFSET($E$1:$G$1,MATCH(A2,$D$2:$D$7,0),),0))
Я разместил все на одном листе, чтобы было легче смотреть, а также чтобы функция была немного короче.
Согласно комментарию Барри ниже, лучшим вариантом было бы избежать смещения с помощью другой индексной функции, чтобы она не была изменчивой.
=INDEX($E$1:$G$1,MATCH("x",INDEX($E$2:$G$7,MATCH(A2,$D$2:$D$7,0),0),0))
решение2
Для моего текущего решения у меня есть
=MATCH(A1,Sheet1!A1:A10,0)
в столбце B, возвращая строку, содержащую вещь в sheet2. Пока все хорошо. Но чтобы затем вернуть позицию x в этой строке в sheet2 и дать правильное слово, у меня есть это чудовище, использующее ссылку R1C1 на конкатенированную строку внутри косвенной функции для преобразования номера строки в ссылку, которую я могу использовать:
=IF(INDIRECT("sheet2!R"&B1&"C2",0)="X","fruit",IF(INDIRECT("sheet2!R"&B1&"C3",0)="X","confectionary",IF(INDIRECT("sheet2!R"&B1&"C4",0)="X","crime","ERROR")))
Затем строка вычисляется как «sheet2R[rownumber]C[column]», которая передается в косвенную ссылку (преобразуется в обычную ссылку), которая затем переходит в оператор if, чтобы преобразовать присутствие x в соответствующее слово.
решение3
Вот мое предпочтительное решение, концепция которого похожа на концепцию gtwebb (и предполагается, что ваши данные выровнены, как на его снимке экрана), но оно не использует OFFSET
(что, как я считаю, следует использовать только тогда, когда нет других вариантов, потому что этоизменчивый).
=INDEX($E$1:$G$1,MATCH("x",$E2:$G2,0))