Baseado no seguinte exemplo:
Eu quero procurar por palavras do $D$2:$D$6
variam em frases do $A$2:$A$8
alcance e use o valor da coluna lateral (aqui Tag
). Até agora estou fazendo isso:
B2 formula
------------------
=IF(NOT(ISERROR(SEARCH($D$2,A2))),$E$2,
IF(NOT(ISERROR(SEARCH($D$3,A2))),$E$3,
IF(NOT(ISERROR(SEARCH($D$4,A2))),$E$4,
IF(NOT(ISERROR(SEARCH($D$5,A2))),$E$5,
IF(NOT(ISERROR(SEARCH($D$6,A2))),$E$6,
"other"
)
)
)
)
)
Embora isso funcione, minha fórmula é tão longa quanto o número de palavras de pesquisa que tenho, ao passo que eu gostaria de usar um intervalo para torná-lo mais limpo e fácil de manter (por exemplo, se adicionar uma palavra de pesquisa, preciso adicionar uma IF
declaração para essa palavra na minha fórmula).
Existe uma maneira de replicar a solução acima com uma fórmula baseada em intervalo?
=LOOKUP(2^15,SEARCH(INDIRECT("D$2:D$"&COUNTA($D:$D)+1),A2),E$2:E$6)
. O que é interessante é que apesar de eu terE$2:E$6
estática, funciona (ou seja, procura por valores nas células abaixoE$6
:)=LOOKUP(2^15,SEARCH(Table[words],A2),Table[tags])
- Se você adicionar linhas à tabela, elas serão incorporadas automaticamenteVocê precisa usar a fórmula de matriz. Na célula B2, digite:
=IFERROR(OFFSET($E$1,MATCH(1E+37,SEARCH(D$2:D$6,A2),1),0),"other")
e pressione Ctrl + Shift + Enter para inseri-lo como uma fórmula de matriz.
Ele usa o
SEARCH
função para coincidir com cada palavra em sua lista, e encontra o último que é menor que um "grande número" (aqui 1E + 37). Se houver mais de uma correspondência, ela encontrará a que estiver mais abaixo na lista (por exemplo, "um carro vermelho e um gato preto" retornará "objeto"). Caso nenhum seja encontrado, oIFERROR
bit lhe dá "outro".Claro, você terá que estendê-lo à medida que sua lista ficar mais longa. (Lembre-se sempre de Ctrl + Shift + Enter quando você edita!
fonte
"In B2, type:"
D$2:D$6
comINDIRECT
eCOUNTA
que está funcionando bem:=IFERROR(OFFSET($E$1,MATCH(1E+37,SEARCH(INDIRECT("D$2:D$"&COUNTA($D:$D)+1),A2),1),0),"other")
OFFSET
com um número de linhas pode ser mais "elegante" do queINDIRECT
. Eu também gosto de usar intervalos nomeados dinâmicos. Muitas maneiras de esfolar um gato :)Para resolver isso eu usei alguns VBA em um botão habilitado para macro na página chamada 'Atualizar' para que você pudesse acrescentar a folha como necessária;
O formato básico de;
Pode ser copiado e os valores de variáveis de termo e tag alterados para qualquer termo de pesquisa e tags que você desejar, sem precisar existir na planilha.
Também é importante notar que sua equação IF está usando um negativo duplo, você pode usar IF (SEARCH em vez de IF (NOT (ISERROR (SEARCH).
fonte
VBA
vai exigir ainda mais manutenção do que minha fórmula. Além disso, eu discordoIF(SEARCH
sendo o mesmo queIF(NOT(ISERROR( SEARCH
, se a pesquisa falhar, o primeiro retorna#VALUE!
enquanto o segundo retorna oIF
valor de caso falso: veja por si mesmo=IF(SEARCH("a","b"),"found","not found")
e=IF(NOT(ISERROR(SEARCH("a","b"))),"found","not found")