Booleano “OR” Dentro da Função

2

Eu não sou novo em excel ou vba; no entanto, estou tendo alguma dificuldade com a falta de uma função booleana "ou" no excel. Como você sabe, o "&" função funciona bem, mas você não pode inserir o "|" ou "||" operador em uma fórmula. Existe uma alternativa que me dará um "ou"?

Nota: O "ou função" predefinido (isto é, [ou (condição1, condição2 ...)] não é útil nesta instância. Ele avalia valores em outro conjunto de células em vez da célula atual e retorna "true" ou "false" em vez de um valor numérico.

O código que estou usando atualmente é o seguinte: = IF (IFERROR (INDEX ($ H $ 2: INDIRECT ("H" e ROW () - 1), MATCH ( 7 , $ D $ 2: INDIRECT (" D "& ROW () - 1), 0)), 0) = 99, (INDIRETO (" F "& ROW ()) * 2), INDIRETO (" F "& ROW ()))

O valor "7" está sendo correspondido no momento. Eu preciso que ele corresponda a vários valores, como Match (5 | 6 | 7, ... ou Match (5 || 6 || 7, ...

Alguma idéia brilhante?

    
por Noah 11.06.2015 / 17:36

3 respostas

2

Isso é muito desajeitado, mas você pode aninhar instruções IFERROR dentro de seu INDEX / MATCH.

=INDEX(D:D,IFERROR(MATCH(5,D:D,0),IFERROR(MATCH(6,D:D,0),IFERROR(MATCH(7,D:D,0),""))))

ETA: Funciona essencialmente procurando por 5, depois 6 e depois 7 dentro da coluna D. A solução de Barry nos comentários para esta resposta é provavelmente uma resposta melhor que esta.

    
por 11.06.2015 / 18:52
1

Uma função "a OR b" é apenas uma função combinada de uma função "NOT (AND (NOT (a); NOT (b)))". Dá o seguinte como resultado, se você usá-lo assim.

A, VERDADEIRO, VERDADEIRO, FALSO, FALSO;

B, VERDADEIRO, FALSO, VERDADEIRO, FALSO;

função TRUE, TRUE, TRUE, FALSE;

Isso poderia ser estendido para incluir tantas variáveis quanto você quiser, mas você pode usá-lo com uma função de correspondência é a verdadeira questão agora. Precisa de mais detalhes para experimentar e o arquivo, se possível.

Você poderia fazer um script para isso, tentar todos os valores com um simples loop.

    
por 11.06.2015 / 18:49
1

Supondo que você deseja corresponder 5 , 6 ou 7 e encontrar a primeira linha correspondente para qualquer um deles, use esta fórmula

=IF(IFERROR(INDEX($H$2:INDIRECT("H"&ROW()-1),AGGREGATE(15,6,MATCH({5,6,7},$D$2:INDIRECT("D"&ROW()-1),0),1)),0)=99,2,1)*INDIRECT("F"&ROW())

A função

AGGREGATE existe apenas no Excel 2010 ou em versões posteriores

Isso funciona porque a parte MATCH agora retorna um "array" de 3 valores - um para cada 5, 6 e 7 - a posição numérica no intervalo ou #N/A se eles não existirem no intervalo range, então match pode retornar esse resultado

{#N/A,4,11}

Isso significa que 5 não foi encontrado, 6 é encontrado na 4ª linha do intervalo de pesquisa e 7 é encontrado na 11ª linha.

A função AGGREGATE , portanto, é assim:

AGGREGATE(15,6,{#N/A,4,11},1)

onde 14 é o tipo de função para aplicar [ SMALL ], 6 significa ignorar erros e o 1 no final define o valor k para SMALL , então basicamente ele pega o menor valor de {#N/A,4,11} enquanto ignora os erros, então, neste caso, ele retorna 4, o que corresponde à primeira correspondência para 5, 6 ou 7

    
por 11.06.2015 / 22:17