Я использую Microsoft Excel 2016. У меня есть две таблицы на разных листах.
sheet1.tbl1 {
key1,
key2,
val1,
fun1,
fun2
}
sheet2.tbl2 {
key1,
key2,
val1,
val2
}
Я хочу перевести значения в из sheet1.tbl1
с sheet2.tbl2
помощью формулы или других методов. В частности, join by key1, key2
и bring val1, val2
from sheet2.tbl2
в fun1, fun2
из sheet1.tbl1
соответственно. Ключи оба уникальны в обеих таблицах, поэтому первое совпадение подойдет.
Я пробовал формулу
=INDEX(rls, MATCH(tbl1[[key1]:[key2]], tbl2[key1]:[key2]], 0),3)
Но это не работает.
Я также не хочу использовать расширения, я хочу добиться этого с помощью встроенной функциональности. И желательно с помощью синтаксиса столбцов таблицы ( tbl1[[key1]:[key2]]
).
решение1
VLOOKUP()
Трудность заключается в комбинации клавиш во второй таблице. Например, это затрудняет использование . Но это не является особой проблемой для INDEX/MATCH
или XLOOKUP()
.
Например:
=XLOOKUP($A1:$A9&"|"&$B1:$B9, $H$20:$H$28&"|"&$I$20:$I$28, J20:J28,,0)
Вы объединяете ключи с помощью оператора union &
, разделяя их неожиданным символом, который существует в существующих данных, например |
. (Вы можете выбрать символ, а затем выполнить его поиск в ключах, чтобы убедиться, что он не используется.) Это делается для того, чтобы не возникало неожиданных дубликатов. Пример: одна пара ключей — это Add
и ress
, а другая — Ad
и dress
. С символом между ними получается Add|ress
и , Ad|dress
а не два экземпляра Address
.
Объединение просто для XLOOKUP()
and MATCH()
(половина, INDEX/MATCH
в которой вы это делаете). Both также могут легко обрабатывать массивы для этих частей, так что вы можете создать одну формулу.
В текущих версиях они будут, SPILL
что отлично работает. В более старых версиях (вы отметили 2016 год) их не будет, поэтому вам нужно будет использовать либо {CSE}
ввод, либо копировать и вставлять вниз по столбцу по мере необходимости.
Для новых версий XLOOKUP()
имеет простую и очевидную (хорошую для обслуживания) формулу. Для старых версий INDEX/MATCH
жертвует немного:
=INDEX($J$20:$J$28, MATCH($A1:$A9&"|"&$B1:$B9, $H$20:$H$28&"|"&$I$20:$I$28,,0))
Учитывая, что вам нужно справиться с обоими вариантами, используйте именно этот.
Ни одна из формул не поддерживает целевой диапазон из двух столбцов, поэтому (в этих формулах) J20:K28 недоступен.
(Но, естественно, кто-то может знать хороший способ сделать его доступным!)
Есть хороший метод FILTER/FILTER
, но вы не можете использовать его с пользователями Excel-2016, поэтому он вам сегодня не поможет. Хотя может быть полезным методом в будущих рабочих книгах:
=FILTER(FILTER(H20:K28,SORT(A1:A9&"|"&B1:B9)=SORT(H20:H28&"|"&I20:I28)),{0,0,1,1})
Внутренний FILTER()
выбирает данные. Конечно, списки ключей почти наверняка не в том же порядке (или "=F12, =F13, =F14 и т. д. было бы близко к рабочему, а?). Поэтому используйте SORT()
на каждом массиве объединения ключей, чтобы расположить их в том же порядке. Если во второй таблице есть пары ключей, которых нет в первой, вам нужно будет либо удалить их, либо выбрать другой путь.
Затем внешний метод FILTER
работает во многом так же, как INDEX()
при использовании константы массива для выбора столбцов (или строк) для вывода (и INDEX()
вместо этого вы могли бы использовать, но не так легко). FILTER()
использует простую константу массива как функцию «показывать столбец/не показывать столбец». Таким образом, вы выводите только два столбца, которые хотите вывести.
Он хорош тем, что обеспечивает многомерный вывод, включая SPILL
-ing, поэтому одна формула в одной ячейке, и вы получаете весь вывод.
Вы даже можете использовать FILTERXML()
то, что было бы у пользователей 2016 года, но хотя это очень хорошее и умное использование (особенно потому, что метод создаст оба массива столбцов в одном XPATH) usually
, в этом случае это будет просто очень простое упражнение по низкоуровневому перемалыванию чисел. Туповато... "по максимуму". И могут возникнуть проблемы с внутренней длиной строки массива.
И это не говоря уже о вспомогательном маршруте столбцов (для комбинированных ключей) или его аналоге, помещающем комбинированные ключи в именованные диапазоны, чтобы к ним было легко обращаться.
Я бы рекомендовал этот INDEX/MATCH
метод для вашего состава пользователей.