Retornando um valor que é CLOSEST para algum valor encontrado dentro de um grande intervalo de dados

1

Eu tenho uma coluna A1:A20 cujos valores eu preciso encontrar em uma grande tabela de dados.

Para os propósitos deste exemplo, direi que a tabela de dados varia de D1:Z25 .

Idealmente, eu teria uma fórmula do Excel que me diria se o valor exato da coluna A fosse encontrado na tabela e, caso contrário, retornaria o valor CLOSEST para ela.

Eu posso usar a fórmula

=IF(SUM(IF(D1:Z25=$A1,1,0))>=1,$A1,"") + ctrl , deslocamento , entra e retornará o valor EXACT se for localizado dentro da tabela.

A minha pergunta é: se o valor EXACT não estiver localizado na tabela, existe alguma forma de poder devolver o valor CLOSEST a ele?

Eu não quero usar o arredondamento, pois meus valores precisam ser exatos.

    
por r.phill 16.07.2018 / 16:44

2 respostas

0

Aqui está uma maneira alternativa para o seu problema. Infelizmente, não funciona em matrizes bidimensionais como no seu caso. Se você puder converter seus valores em um formulário de matriz unidimensional, por exemplo D1: Z575 A fórmula abaixo retorna o valor desejado.

=INDEX(D1:Z575,MATCH(MIN(ABS(D1:Z575-A1)),ABS(D1:Z575-A1),0))

Importante: Pressione a tecla Ctrl + Deslocamento + Enter ao invés disso Enter .

A lógica é, semelhante ao comentário do fixer1234, para encontrar a posição da diferença mínima e retornar o valor usando essa posição na função INDEX .

Aqui está a explicação detalhada da fórmula: Como encontrar a correspondência mais próxima

    
por 17.07.2018 / 09:27
0

Há provavelmente uma maneira mais elegante de fazer isso, mas aqui está pelo menos uma solução deselegante. A fórmula se torna grande, então vou explicar em pedaços.

Euqueriailustrarcomoissofunciona,entãomantiveointervaloviável.Escale-oparaassuasnecessidades.

MeuarraydedadoséD1:F10.Acabeidepreenchê-locomnúmerosconsecutivosporqueissofoifáciledeixouailustraçãoclara.Afórmulanãodependedenúmerosinteirosoudeumaordemespecífica.Eusubstituíváriosdosvalorescomduplicatasdealgunsdosvalorescorrespondentesparaverificarseafórmulafunciona.

NacolunaA,háalgunsvaloresdesegmentação-umemqueacorrespondênciamaispróximaéarredondadaparabaixo,umacorrespondênciaexata,umaemqueacorrespondênciamaispróximaéarredondadaeoutraemqueodestinoéequidistanteentreduascorrespondênciasmaispróximas.Euescolhivaloresdedestinoparaterumacorrespondênciaemcadacoluna.

AcolunaBcontémacorrespondênciamaispróximanamatrizparacadavaloralvo(asolução).

Afórmulaéconstruídaapartirdecomponentes,portanto,explicareioscomponentesmostradosnessagrade:

OsvaloresdedestinosãoreplicadosnacolunaA.AcolunaBencontraadiferençamínimaentreovalordedestinoeovalormaispróximonatabela.FórmulaemB16:

{=MIN(ABS($D$1:$F$10-A1))}

Estaéumafórmuladematriz.Éumcomponentedafórmulafinal,entãoafórmulafinalprecisaserdigitadacomCtrlDeslocarEnter.

Nãosabemosemquedireçãoadiferençaestá,seprecisamosadicionarousubtrairparacorresponderaovalormaispróximonatabela,entãotentamososdois.Paraencontrarovalorcorrespondente"arredondando para baixo", ele usa a fórmula na coluna C. Para encontrar o valor correspondente "arredondando para cima", ele usa a fórmula na coluna D. Um subtrai e um adiciona a diferença:

=SUMPRODUCT(($D$1:$F$10=A1-B16)*$D$1:$F$10)
=SUMPRODUCT(($D$1:$F$10=A1+B16)*$D$1:$F$10)

Se os primeiros parênteses forem verdadeiros, ele será avaliado como 1 , caso contrário, será 0 . O SUMPRODUCT multiplica isso com o valor da célula associada e adiciona os resultados.

Mas observe alguns resultados estranhos.

  • Vários alvos retornam zero ou nenhuma correspondência. Esses são os casos em que a correspondência é encontrada por arredondamento na outra direção.
  • O destino que estava a meio caminho entre os dois valores mais próximos retorna o arredondamento mais baixo do valor correspondente e o maior valor correspondente é arredondado para cima. Se você se importa com qual deles é escolhido, sequencie os componentes da fórmula de forma arredondada na direção preferida.
  • Vários valores são o dobro do que deveriam ser. Estes são os casos em que eu dupliquei o valor mais próximo; a fórmula adiciona em cada um.

Para lidar com esses casos, contamos quantas correspondências são encontradas. Isso é feito nas colunas E e F:

{=SUM($D$1:$F$10=A1-B16)}
{=SUM($D$1:$F$10=A1+B16)}

Esses componentes também são fórmulas de matriz. A fórmula na coluna E avalia se cada valor de célula é igual ao destino menos a diferença, que é True ou False ( 1 ou 0 ) e soma esses valores. A fórmula na coluna F é a mesma, exceto que testa contra o alvo mais a diferença.

Podemos empregar esses resultados de duas maneiras: para testar a inexistência de correspondência (resultado zero), para selecionar o resultado a ser usado e como uma contagem de correspondências para corrigir o valor inflado de várias correspondências na etapa anterior.

Observe que, como estamos encontrando a correspondência mais próxima, sempre haverá um "mais próximo", então arredondar para cima ou para baixo não pode retornar zero. Nós só precisamos testar um dos resultados. Se for zero, usamos o outro. Se não for zero, usamos esse valor, pois o outro valor será zero, o mesmo ou outro resultado válido que pode ser selecionado pela ordem do teste.

Para o resultado válido selecionado, a contagem é usada como um divisor. Então a fórmula para o resultado é:

=IF(E16=0,D16/F16,C16/E16)

Então é assim que funciona. Transformar isso em uma única fórmula consolidada é uma questão de substituir referências de célula pela fórmula na célula referenciada. Aqui está o que a fórmula consolidada parece (eu vou adicionar espaçamento e linha feeds para torná-lo mais legível; você gostaria de removê-los se você quiser copiar e colar a fórmula):

{=IF(SUM($D$1:$F$10=A1-MIN(ABS($D$1:$F$10-A1)))=0,  
   SUMPRODUCT(($D$1:$F$10=A1+MIN(ABS($D$1:$F$10-A1)))*$D$1:$F$10)/SUM($D$1:$F$10=A1+MIN(ABS($D$1:$F$10-A1))),  
   SUMPRODUCT(($D$1:$F$10=A1-MIN(ABS($D$1:$F$10-A1)))*$D$1:$F$10)/SUM($D$1:$F$10=A1-MIN(ABS($D$1:$F$10-A1))))}
    
por 17.07.2018 / 12:18