Excel: pegue dados horizontais da tabela, organize verticalmente em uma folha diferente, ignorando espaços em branco

1

Eu tenho uma tabela de informações de contato do fornecedor organizadas como:

vendorname | address | city | state | zip | phone | fax | contactperson | phone | email

... e eu quero selecionar vendorname de um menu suspenso em uma folha diferente (peguei essa parte manipulada), que então preencheria as informações de contato para esse fornecedor nas células abaixo.

Para torná-lo mais complicado, quero ignorar todas as colunas em branco da tabela. Por exemplo, digamos que não haja um número de fax para uma entrada na tabela. Eu não quero colocar uma célula vazia entre 'telefone' e 'pessoa para contato'.

Isso pode ser feito usando apenas fórmulas?

    
por wiczway 22.10.2015 / 06:58

2 respostas

1

Você provavelmente deseja usar a função VLOOKUP() . Este seria um exemplo:

=VLOOKUP($B$3, Table1,2,FALSE)

Em que $ B $ 3 é a célula com a lista suspensa e Table1 é a tabela com dados de contato. Coloque esta fórmula na primeira célula a ser preenchida quando um item for selecionado na lista suspensa. Nas outras células a serem preenchidas, basta incrementar o terceiro parâmetro (o parâmetro index da coluna; por exemplo, 2 na amostra acima).

AFAIK, não há como ignorar colunas em branco com esse método. Você provavelmente precisará do VBA para isso.

    
por 22.10.2015 / 08:15
0

Sim, só pode ser alcançado com fórmulas:

Localizando rótulos (coluna A):

=IFERROR(INDEX(Table1[#Headers],SMALL(IF(OFFSET(Table1[#Headers],MATCH($B$8,Table1[vendorname],0),0)="","",COLUMN(Table1[#Headers])),ROW()-ROW($A$7))),"")

  • MATCH($B$8,Table1[vendorname],0) encontra a linha que contém o contato selecionado
  • OFFSET(Table1[#Headers],MATCH(...),0) obtém o endereço da linha selecionada
  • IF(OFFSET(...)="","",COLUMN(Table1[#Headers])) verifica quais colunas do item selecionado contém dados (valor vazio para valores vazios, número da coluna para os outros)
  • SMALL(IF(...),ROW()-ROW($A$7) seleciona a próxima coluna a ser usada
  • INDEX(Table1[#Headers],SMALL(...)) obtém o título
  • =IFERROR(INDEX(...),"") mostra a célula vazia depois de exibir todos os dados

Localizando dados (coluna B):

=IFERROR(INDEX(OFFSET(Table1[#Headers],MATCH($B$8,Table1[vendorname],0),0),SMALL(IF(OFFSET(Table1[#Headers],MATCH($B$8,Table1[vendorname],0),0)="","",COLUMN(Table1[#Headers])),ROW()-ROW($A$7))),"")

A única diferença em relação ao anterior é o primeiro parâmetro de INDEX() , que é a mesma fórmula OFFSET() usada em small para localizar dados na linha selecionada, em vez do título.

Ambas as fórmulas são fórmulas de array, então você precisa digitá-las CTRL + SHIFT + ENTER

    
por 22.10.2015 / 09:05