Estou tentando evitar a redundância de calcular o mesmo índice quantas vezes houver registros, portanto, devo pré-calcular o índice com MATCH em uma célula oculta acima da minha tabela?
Também é importante notar que, embora minhas tabelas não sejam massivas, elas também não serão pequenas. Provavelmente, haverá cerca de 6 tabelas, cada uma com um ou dois VLOOKUPS (coluna completa), com uma contagem total de registros nas centenas.
Mais precisamente, vou criar um conjunto de tabelas no Excel e vou emular as coisas boas de um banco de dados relacional adequado usando a função VLOOKUP para obter um valor de uma tabela relacionada, mas farei uso da função MATCH para obter o índice da coluna desejada pelo cabeçalho. Segue-se a fórmula real que utilizarei:
=VLOOKUP([@ForeignKey],RelatedTable,MATCH(RelatedTable[[#Headers],[ItemName]],RelatedTable[#Headers],0),FALSE)
'Broken down by parameters
VLOOKUP(
Lookup_value := [@ForeignKey]
Table_array := RelatedTable
Col_index_num := 'Return of MATCH
MATCH(
Lookup_value := RelatedTable[[#Headers],[ItemName]]
Lookup_array := RelatedTable[#Headers]
Match_type := 0 'Exact Match
Range_lookup := FALSE 'Exact Match
EDITAR:
A primeira tabela é aquela com a chave primária. Os dois últimos são dos dois exemplos que estou me referindo.
Table_Products
╔════╦════════╦═══════════════╦═══════════╗
║ ║ A ║ B ║ C ║
╠════╬════════╬═══════════════╬═══════════╣
║ 1 ║ ItemID ║ ItemName ║ ItemPrice ║
╠════╬════════╬═══════════════╬═══════════╣
║ 2 ║ 1 ║ Stylus ║ $ 25.00 ║
╠════╬════════╬═══════════════╬═══════════╣
║ 3 ║ 2 ║ Mech Keyboard ║ $ 120.00 ║
╠════╬════════╬═══════════════╬═══════════╣
║ 4 ║ 3 ║ Monitor ║ $ 750.00 ║
╚════╩════════╩═══════════════╩═══════════╝
Table_Transactions
EITHER LIKE THIS
╔════╦════════╦════════╦═════╦═══════════════════════╗
║ ║ A ║ B ║ C ║ D ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 1 ║ CustID ║ ItemID ║ Qty ║ ItemName ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 2 ║ 101 ║ 3 ║ 1 ║ VLOOKUP(,,Match(,,),) ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 3 ║ 102 ║ 3 ║ 2 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 4 ║ 103 ║ 3 ║ 1 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 5 ║ 104 ║ 2 ║ 3 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 6 ║ 105 ║ 1 ║ 8 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 7 ║ 106 ║ 2 ║ 2 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 8 ║ 107 ║ 2 ║ 1 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 9 ║ 108 ║ 2 ║ 2 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 10 ║ 109 ║ 1 ║ 4 ║ ... ║
╠════╬════════╬════════╬═════╬═══════════════════════╣
║ 11 ║ 110 ║ 2 ║ 16 ║ ... ║
╚════╩════════╩════════╩═════╩═══════════════════════╝
OR LIKE THIS
(D1 cell is NOT part of the table)
╔════╦════════╦════════╦═════╦═════════════════╗
║ ║ A ║ B ║ C ║ D ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 1 ║ ║ ║ ║ Match(,,) ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 2 ║ CustID ║ ItemID ║ Qty ║ ItemName ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 3 ║ 101 ║ 3 ║ 1 ║ VLOOKUP(,,D$1,) ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 4 ║ 102 ║ 3 ║ 2 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 5 ║ 103 ║ 3 ║ 1 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 6 ║ 104 ║ 2 ║ 3 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 7 ║ 105 ║ 1 ║ 8 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 8 ║ 106 ║ 2 ║ 2 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 9 ║ 107 ║ 2 ║ 1 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 10 ║ 108 ║ 2 ║ 2 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 11 ║ 109 ║ 1 ║ 4 ║ ... ║
╠════╬════════╬════════╬═════╬═════════════════╣
║ 12 ║ 110 ║ 2 ║ 16 ║ ... ║
╚════╩════════╩════════╩═════╩═════════════════╝