Excel: A combinação INDEX (, MATCH (),)) funciona com intervalos, mas não com dados formatados como TABLE

1

A configuração:

Eu tenho duas planilhas do Excel com dados, ambas "Formatadas como tabela (s)". Um é um grande conjunto de dados, com muitas linhas e colunas (campos) e o outro é uma espécie de "dicionário", com apenas 2 linhas e 2 colunas (campos).

Tabela1 (conjunto de dados)

+----------------------------------------------------+
| month | week | productName | price     | sold pcs. |
+---------------------------------------------------+|
| jan   | 1    | heavy       | (formula) | 25        |
| jan   | 2    | heavy       | (formula) | 51        |
| jan   | 3    | heavy       | (formula) | 06        |
| jan   | 4    | heavy       | (formula) | 00        |
| jan   | 1    | light       | (formula) | 39        |
| jan   | 2    | light       | (formula) | 11        |
| jan   | 3    | light       | (formula) | 98        |

Tabela2 (dict)

+---------------------+
| productName | price |
+---------------------+
|  heavy      | 125   |
|  light      | 65    |

O que preciso fazer:

O que eu preciso fazer é trazer os valores ( preços do produto ) do dicionário para o grande conjunto de dados, onde certos valores ( nomes de produtos ) correspondem.

O que eu tentei:

=INDEX(Table2[@price], MATCH(Table1[@productName], Table2[@productName], 0))

Ao trabalhar com intervalos, essa combinação funciona de maneira excelente. No entanto, quando eu faço assim, com dados formatados como tabelas, ele corresponde apenas na primeira linha, da Tabela1.

Este é o resultado que obtenho :

+-------------------------------------------------+
| month | week | productName | price  | sold pcs. |
+-------------------------------------------------+
| jan   | 1    | heavy       | 125    |  25       |
| jan   | 2    | heavy       | #N/A   |  51       |
| jan   | 3    | heavy       | #VALUE |  06       |
| jan   | 4    | heavy       | #VALUE |  00       |
| jan   | 1    | light       | #VALUE |  39       |
| jan   | 2    | light       | #VALUE |  11       |
| jan   | 3    | light       | #VALUE |  98       |

A primeira linha é correspondida corretamente, a segunda linha (novamente igual à primeira) não é encontrada e, a partir daí, os valores de erro são iniciados. O que devo fazer?

Obrigado

    
por Alex Starbuck 29.03.2018 / 09:59

2 respostas

2

Você está usando indevidamente os intervalos nomeados:

  • Table2[@productName] aponta para um único elemento na tabela
  • Table2[productName] aponta para a coluna inteira
  • Table2 aponta para todas as colunas e linhas da tabela, cabeçalhos excluídos

Você pode fazer isso facilmente com um VLOOKUP:

=INDEX(Table2,MATCH([@productName],Table2[productName],0),MATCH("price",Table2[#Headers],0))

Soluções alternativas:

=VLOOKUP([@productName],Table2,2,0)

=VLOOKUP([@productName],Table2,MATCH("price",Table2[#Headers]),0)

Ou, desde que cada productName seja único, você pode usar SUMIF:

=SUMIF(Table2[productName],[@productName],Table2[price])
    
por 29.03.2018 / 10:18
1

Isso deve funcionar para você:

=INDEX(Table2[[#All],[Price]],MATCH([@productName],Table2[[#All],[ProductName]],0),1)

Nota. o uso de #ALL, isso seleciona toda a coluna, não apenas uma linha.

    
por 29.03.2018 / 10:17