Espero que você olhe aqui novamente.
Eu darei uma resposta onde nenhum VBA é necessário e tentarei explicar cada detalhe.
Usando a imagem que você compartilhou, criei uma planilha própria:
Começamos em F2
, que é o item mais importante. Simplesmente =A2
fará isso.
Nada muito para explicar aqui.
Em G2
vem =IF(LEN(F2),INDEX(B:B,MATCH(F2,A:A,0)),"")
. Sabendo que a segunda coluna sempre será a mesma para a primeira coluna, ela simplesmente procura a correspondência exata de F2
no intervalo A:A
( MATCH
) e imprime o que estiver em B:B
na mesma linha. (Para no primeiro item encontrado, enquanto não importa, é sempre o mesmo). LEN
apenas impede que mostre #NA
se a cadeia de pesquisa estiver vazia e também ignora todo o cálculo da matriz.
Em H2
vem o que você sugeriu =IF(LEN(F2),SUMIF(A:A,F2,C:C),"")
. Ele simplesmente soma todos os valores na coluna C
que possuem o termo de pesquisa fornecido na coluna A
. O LEN
-part é o mesmo que o de G2
, embora não apareça um erro, ele exibirá 0
. No entanto, você ainda receberá um zero se houver um termo de serch e a soma for 0
.
Enquanto você pode simplesmente preencher automaticamente G2
e H2
para baixo o quanto precisar, não funcionará para F2
. Mas você pode fazer isso com a seguinte fórmula em F3
:
=IF(LEN(F2),IFERROR(INDEX(A:A,MATCH(1,(COUNTIF(F$2:F2,A$2:A$1000)=0)*(A$2:A$1000<>""),0)+1),""),"")
This is an array formula and must be confirmed with Ctrl+Shift+Enter.
Ele começa com COUNTIF
, que simplesmente retorna um array binário, enquanto cada item recebe um 1
se corresponder a qualquer string de pesquisa, todos os outros obtêm 0
(procurando por todas as strings acima de si F$2:F2
). Como não queremos obter um item já usado, transformamos todos 0
TRUE
( =0
). Também não queremos um item empty
, então também verificamos isso ( A$2:A$1000<>""
). Multiplicar 2 matrizes booleanas é o mesmo que ter um AND
para cada par de itens, enquanto o AND
real deve verificar se todos os itens em matrizes estão em TRUE
. No entanto, a multiplicação novamente nos fornece um array binário com 1
em cada item que não está vazio e não é usado. MATCH
agora verifica o primeiro 1
e retorna seu número de posição (linha). Mas a partir da segunda linha nos dá um deslocamento que é anulado com +1
. Tendo a posição, INDEX
nos dá a string que precisamos. IFERROR
é somente para a primeira solução empty
que retornaria #NA
. E o LEN
simplesmente pula os cálculos para todas as células após o primeiro vazio.
Usando o assistente de fórmulas para ver o que realmente calcula também ajuda a compreensão. Mas sempre doublecheck todo o $
ou o preenchimento automático pode falhar.
Se você ainda precisar perguntar algo, basta escrever um comentário. :)