Usei o VLOOKUP, MATCH, INDEX e até o complemento Fuzzy. Tenho certeza de que uma delas ou uma combinação pode funcionar, eu simplesmente não tenho o know-how para fazê-la funcionar e obter "# N / A" o tempo todo ...
Problema: Eu tenho 2 colunas, com o número total diferente de itens, cheio de referências. Um tem parcialmente os mesmos números do outro, com algumas alterações, como:
Column A typical number (ex): 025983553-1
Column B typical number (ex): 225983553
Mas tenho milhares de números e quero corresponder cada célula de A a todo o intervalo de B e, se houver uma correspondência, mesmo na célula B6544, quero saber e obter algo (na coluna C) como "True B6544".
Um (pequeno) exemplo do que estou lidando (e não as referências exatas, são dados confidenciais internos):
B J H
1 025983553-1 225983553 True, B1
2 025973223-1 222222345 False
3 025965463-2 233444667 False
4 025911122-4 211198989 False
5 025998764-1 212989238 False
6 025925925-3 224397501 False
7 025900000-2 225973223 True, B2
8 025999999-5 223334445 False
9 025965453-6 211100110 False
10 025943536-2 225911122 True, B4
...
Como você pode ver, J1 é uma correspondência parcial para B1, então H1 retorna "Verdadeiro, B1".
Como dito acima, eu tentei o MATCH, VLOOKUP, INDEX e o complemento Fuzzy. Eu entendo que eu tenho que algo como:
=VLOOKUP(B1, $J$1:$J$10, valueThat IwantIThink, FALSE)
Mas nada parece funcionar ... qualquer ajuda será apreciada!
fonte
Respostas:
Experimente esta pequena função definida pelo usuário:
Como mostra a ilustração, em K1, digite:
e copie para baixo.
A rotina retira o dígito inicial da sub-string e tenta encontrá-lo na coluna.
fonte
Como o Excel não suporta expressões regulares, não acho que exista uma fórmula que não precise de uma coluna auxiliar. No meu exemplo,
A fórmula em C1 é:
Isso remove o primeiro dígito de B1.
A fórmula em D1 é:
Observe que, embora isso deva produzir a saída desejada, eu recomendaria dividir TRUE / FALSE e a referência de célula em duas colunas. Portanto, explicarei apenas a
ADDRESS
parte, que fornecerá a referência da célula se uma correspondência for encontrada ou um erro caso contrário.VLOOKUP
não é útil aqui, porque retornará um valor na mesma linha que o valor correspondente.MATCH
, por outro lado, retorna a linha do valor correspondente.MID(A1,2,SEARCH("-",A1)-2)
retorna a substring de A1, começando com o segundo caractere, até e excluindo a primeira ocorrência de "-". Este é o valor que estamos procurando (lookup_value
).MATCH(lookup_value, C$1:C$10, 0)
retornará a linha da primeira ocorrência delookup_value
. Como não podemos aplicar uma função ao intervalo e o Excel não suporta expressões regulares, precisamos da coluna auxiliar C. O último parâmetro (0
) é necessário porque os valores não são classificados. Observe que o valor da linha retornado é relativo ao intervalo especificado; portanto, se o seu intervalo não começar na linha 1, você deverá contabilizar isso (por exemplo, adicionandoROW([first cell])-1
ao resultado deMATCH
).ADDRESS(matched_row, COLUMN(B1))
produz a referência de célula. Você pode usar o número absoluto da linha em vez deCOLUMN(B1)
se quiser, mas isso não seria tão legível por humanos.Você precisa decidir por si mesmo quais referências devem ser absolutas ou relativas.
fonte
Estou tentando responder parcialmente à sua pergunta, pois ainda não temos a imagem completa.
Adicionei duas colunas auxiliares para processar os dados e compará-los - o que proporcionará uma melhor compreensão.
A
C-helper
coluna retira0
o início e o final- number
.A
I- helper
coluna remove o dígito inicial (ou o primeiro dígito) doJ col
.Então eu fiz uma comparação
vlookup
dos dados e descobri se os dados foram encontrados ou não com base no resultado vlookup ().I-helper
C - helper
A fórmula que eu tenho
C - helper
:==MID(B4,2,LEN(B4)-3)
I - helper
:=MID(D4,2,LEN(D4)-1)
vlookup col
:=IF(ISNA(VLOOKUP(E4,$C$4:$C$13,1,FALSE)),"not_found","found")
A próxima parte do problema é localizar onde essa entrada foi encontrada. Se a entrada for encontrada - seu endereço será retornado, mais a string
Not_Available is returned
. Os dados de amostra agora se parecem com issoEditar
A fórmula que eu tenho
X - helper
:=IF(F4="found",CELL("address",INDEX($B$4:$C$13,MATCH(E4,$C$4:$C$13,0),2)),"Not_Available")
fonte