Limite IF aninhado no Excel

1

Alguém sabe uma maneira de reduzir essa fórmula do Excel, já que eu alcancei o limite "IF" aninhado?

=IF(Sheet!$G$2=Sheet1!I2,"Y",IF(Sheet!$H2=Sheet1!I2,"Y",
 IF(Sheet!$I2=Sheet1!I2,"Y",IF(Sheet!$J2=Sheet1!I2,"Y",
 IF(Sheet!$K2=Sheet1!I2,"Y",IF(Sheet!$L2=Sheet1!I2,"Y",
 IF(Sheet!$M2=Sheet1!I2,"Y",IF(Sheet!$N2=Sheet1!I2,"Y",
 IF(Sheet!$O2=Sheet1!I2,"Y",IF(Sheet!$P2=Sheet1!I2,"Y",
 IF(Sheet!$Q2=Sheet1!I2,"Y",IF(Sheet!$R2=Sheet1!I2,"Y",""))))))))))))
    
por Aaron Krauth 21.09.2016 / 05:23

2 respostas

3

Nota: Minha resposta, abaixo, foi abordada da mesma forma que você faria com circuitos lógicos digitais, onde as condições são avaliadas em paralelo. Nesse caso, você precisa fornecer explicitamente todas as condições. Isso foi totalmente matar aqui; muito mais complicado do que o necessário.

As abordagens mostradas na resposta de Thilina R tiram proveito do fato de que o Excel avalia fórmulas e intervalos em seqüência, então o Excel já está fazendo a maior parte do trabalho de limitar possíveis condições semelhantes às IFs aninhadas na questão.

Nós dois criamos a lógica OR mostrada como minha última abordagem, abaixo. Deixarei essa resposta para qualquer valor educacional ou inovador que ela possa fornecer. Mas a resposta de Thilina R contém as soluções práticas, e meu voto é o Método 1: HLOOKUP.

Não está claro se você está usando uma fórmula mais restritiva do que o necessário. Vou usar uma pequena anotação abreviada para simplificar a discussão. Deixarei de fora os nomes das pastas e me refiro aos testes de igualdade desta maneira: Se for verdade que G2=I2 , eu só chamarei de G2 . Se é falso que G2 = I2, eu vou chamá-lo de Not-G2 . Com essa abreviação, seus IFs aninhados podem ser expressos assim:

    G2 
or: H2 and Not-G2
or: I2 and Not-G2 and Not-H2
or: J2 and Not-G2 and Not-H2 and Not-I2
etc.

Se essas são as regras de que você precisa, você pode fazer isso com um IF e com toda a lógica AND e OR. Seria assim na forma abreviada:

=IF(OR(G2,AND(H2,Not-G2),AND(I2,Not-G2,Not-H2),...),"Y","")

O preenchimento da fórmula real seria assim:

=IF(OR(Sheet!$G$2=Sheet1!I2,
       AND(Sheet!$H2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2),
       AND(Sheet!$I2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2),
       AND(Sheet!$J2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2),
       AND(Sheet!$K2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2),
       AND(Sheet!$L2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2),
       AND(Sheet!$M2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2),
       AND(Sheet!$N2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2),
       AND(Sheet!$O2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2),
       AND(Sheet!$P2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2,Sheet!$O2<>Sheet1!I2),
       AND(Sheet!$Q2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2,Sheet!$O2<>Sheet1!I2,Sheet!$P2<>Sheet1!I2),
       AND(Sheet!$R2=Sheet1!I2,Sheet!$G$2<>Sheet1!I2,Sheet!$H2<>Sheet1!I2,Sheet!$I2<>Sheet1!I2,Sheet!$J2<>Sheet1!I2,Sheet!$K2<>Sheet1!I2,Sheet!$L2<>heet1!I2,Sheet!$M2<>Sheet1!I2,Sheet!$N2<>Sheet1!I2,Sheet!$O2<>Sheet1!I2,Sheet!$P2<>Sheet1!I2,Sheet!$Q2<>Sheet1!I2)),"Y","")

(Eu não posso garantir que um erro de digitação não tenha entrado lá). Fórmulas longas são muito difíceis de serem inseridas e mantidas. Pode ser útil usar células auxiliares para partes da fórmula.

Se isso não é realmente as regras que você precisa, aqui estão alguns casos mais simples:

  • Se você não precisa dessa sequência, e só se importa que qualquer uma, e apenas uma, célula seja igual a I2, aqui está uma maneira de fazer a mesma lógica com um IF:

    =IF((Sheet!$G$2=Sheet1!I2)+(Sheet!$H2=Sheet1!I2)+(Sheet!$I2=Sheet1!I2)+ (Sheet!$J2=Sheet1!I2)+(Sheet!$K2=Sheet1!I2)+(Sheet!$L2=Sheet1!I2)+ (Sheet!$M2=Sheet1!I2)+(Sheet!$N2=Sheet1!I2)+(Sheet!$O2=Sheet1!I2)+ (Sheet!$P2=Sheet1!I2)+(Sheet!$Q2=Sheet1!I2)+ (Sheet!$R2=Sheet1!I2)=1,"Y","")

    Cada conjunto de parênteses contém um dos seus testes. Se a igualdade for verdadeira, ela produzirá um valor de 1 . Se não for verdade, o valor será 0 . É assim que o Excel representa verdadeiro e falso.

    Os resultados de todos esses testes são somados. Se a soma for 1 , isso significa que um e apenas um dos testes foi verdadeiro.

  • Se, na verdade, você só se importa se pelo menos um desses casos é verdadeiro, você poderia usar um OR simples:

    =IF(OR(Sheet!$G$2=Sheet1!I2,Sheet!$H2=Sheet1!I2,Sheet!$I2=Sheet1!I2, Sheet!$J2=Sheet1!I2,Sheet!$K2=Sheet1!I2,Sheet!$L2=Sheet1!I2, Sheet!$M2=Sheet1!I2,Sheet!$N2=Sheet1!I2,Sheet!$O2=Sheet1!I2, Sheet!$P2=Sheet1!I2,Sheet!$Q2=Sheet1!I2,Sheet!$R2=Sheet1!I2),"Y","")

Note que adicionei quebras de linha e espaços extras em todas as fórmulas para que a lógica seja mais fácil de ver. Se você deseja copiar e colar, você precisará removê-los.

    
por 21.09.2016 / 06:14
2

Basicamente, você quer saber se alguma das células G2:R2 em uma planilha tem o mesmo valor que a célula I2 em uma planilha diferente.

Existem várias maneiras de fazer isso. A maneira mais fácil que vem à mente é isso, pois os valores que você está verificando estão em um intervalo contínuo:

Método 1: HLOOKUP / VLOOKUP

=IF(ISERROR(HLOOKUP(Sheet1!I2,Sheet!G2:R2,1,FALSE)),"","Y")

Isso usa procura no valor da célula I2 em uma planilha e verifica se ela está na outra planilha no intervalo G2:R2 . Se o HLOOKUP encontrar pelo menos um valor no intervalo G2:R2 que corresponda à célula I2 na outra planilha, ele retornará Y ou, caso contrário, não retornará um valor.

Eu usei HLOOKUP , pois o intervalo fornecido era um intervalo horizontal. Se o intervalo for um intervalo vertical, você poderá usar VLOOKUP .

Se os valores não forem em um intervalo contínuo por qualquer motivo, você poderá usar os outros dois métodos abaixo.

Aqui está outra maneira:

Método 2: CONCATENAR

=IF(ISERROR(FIND(Sheet1!I2,CONCATENATE(Sheet!G2,Sheet!H2,Sheet!I2,Sheet!J2,Sheet!K2,Sheet!L2,Sheet!M2,Sheet!N2,Sheet!O2,Sheet!P2,Sheet!Q2,Sheet!R2))),"","Y")

Isso basicamente faz uma grande cadeia de todos os valores nas células G2:R2 e verifica se o valor na célula I2 da outra planilha está nessa. Se for, ele retorna Y caso contrário, ele não retornará um valor.

Observe que, como esse método cria uma cadeia grande de todos os dados no intervalo de células que você precisa procurar, dependendo do tipo de dados nessas células, ele pode retornar Y incorretamente. Por exemplo: se Sheet1!I2 tiver o valor 123 e Sheet!G2 tiver o valor 12 e Sheet!H2 tiver o valor 34 , esse método ainda mostrará Y , pois a "cadeia grande" conterá "1234 ..." e o valor 123 estará nessa string.

Ainda outra maneira de fazer isso é:

Método 3: operador booleano - OR

[@ fixer1234 tinha mencionado isso primeiro]

=IF(OR((Sheet!G2=Sheet1!I2), (Sheet!H2=Sheet1!I2),(Sheet!I2=Sheet1!I2), (Sheet!J2=Sheet1!I2), (Sheet!K2=Sheet1!I2), (Sheet!L2=Sheet1!I2), (Sheet!M2=Sheet1!I2), (Sheet!N2=Sheet1!I2), (Sheet!O2=Sheet1!I2), (Sheet!P2=Sheet1!I2), (Sheet!Q2=Sheet!I2), (Sheet!R2=Sheet1!I2) ),"Y","")

Isso usa o operador booleano OR para verificar se algum dos valores no intervalo G2:R2 está na célula I2 na outra planilha. Se o operador booleano encontrar pelo menos um valor que corresponda à célula I2 na outra planilha, ele retornará Y ou, caso contrário, não retornará um valor.

Método 4: Espalhe a fórmula

  1. Se você quiser usar apenas IF condições (por algum motivo que não consigo imaginar), é possível distribuir as condições IF em várias células e usar o resultado dessas células para determinar o resultado final . Por exemplo: você pode ter algumas das condições de IF em uma célula e pode usar o resultado disso em outra célula junto com as mais algumas IF condições e assim por diante.

Você pode ter o seguinte na célula A1 de uma planilha:

=IF(Sheet!$G$2=Sheet1!I2,"Y",IF(Sheet!$H2=Sheet1!I2,"Y", IF(Sheet!$I2=Sheet1!I2,"Y",IF(Sheet!$J2=Sheet1!I2,"Y", IF(Sheet!$K2=Sheet1!I2,"Y","")))))

E então, você pode ter o seguinte na célula A2 de uma planilha:

=IF(A1="Y", "Y", IF(Sheet!$L2=Sheet1!I2,"Y", IF(Sheet!$M2=Sheet1!I2,"Y",IF(Sheet!$N2=Sheet1!I2,"Y", ""))))

Por fim, você pode ter o seguinte na célula A3 de uma planilha:

=IF(A2="Y","Y",IF(Sheet!$O2=Sheet1!I2,"Y",IF(Sheet!$P2=Sheet1!I2,"Y", IF(Sheet!$Q2=Sheet1!I2,"Y",IF(Sheet!$R2=Sheet1!I2,"Y","")))))

Método 5: VBA

Use o VBA se estiver familiarizado com ele para criar uma função personalizada definida pelo usuário na qual você pode ter tantas instruções If aninhadas.

Observação: a saída dessas duas fórmulas é a mesma que você forneceu.

    
por 23.09.2016 / 21:16