Como corrigir esta instrução IF aninhada no Excel - você inseriu muitos argumentos para esta função

0

Estou usando a fórmula do Excel abaixo, mas recebendo um erro que "você inseriu muitos argumentos para essa função". Existe alguma outra maneira que eu possa fazer esta função funcionar por favor?

Por favor, desculpe esta questão básica. Eu não sou especialista em excel.

IF((OR(AF2="CitiCMT", AF2="AML APAC ATHENA", AF2="AML EMEA", AF2="AML Americas")),"AML","", IF((OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China")),"CitiScreening","", IF((OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China")),"CitiScreening","", IF((OR(AF2="Registrations", AF2="Trade Surveillance - Markets", AF2="Reg-Reporting", AF2="Trade Surveillance - IBSG", AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance", AF2="Trade Surveillance - Retail")),"Core Compliance",""))))
    
por Jeet 07.02.2017 / 07:27

3 respostas

2

Outra maneira de escrever sua função seria essa. Cada nível seria um argumento para a função um nível acima. Se você olhar a documentação para Função IF e Função OR você verá que você, como erro diz, fornecido a muitos argumentos para algumas dessas funções. Ou seja, algumas das funções if. O único IF correto parece ser o mais aninhado, cada outra instância tem 4 argumentos. Se você remover as entradas "", , deverá funcionar.

IF(
    (
        OR
        (
            AF2="CitiCMT",
            AF2="AML APAC ATHENA",
            AF2="AML EMEA",
            AF2="AML Americas"
        )
    ),
    "AML",
    "",
    IF
    (
        (
            OR
            (
                AF2="CitiScreening",
                AF2="Offshore Wealth Services",
                AF2="CitiScreening China"
            )
        ),
        "CitiScreening",
        "", 
        IF
        (
            (
                OR
                (
                    AF2="CitiScreening",
                    AF2="Offshore Wealth Services",
                    AF2="CitiScreening China"
                )
            ),
            "CitiScreening",
            "",
            IF
            (
                (
                    OR
                    (
                        AF2="Registrations", AF2="Trade Surveillance - Markets",
                        AF2="Reg-Reporting", AF2="Trade Surveillance - IBSG",
                        AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance",
                        AF2="Trade Surveillance - Retail"
                    )
                ),
                "Core Compliance",
                ""
            )
        )
    )
)
    
por 07.02.2017 / 07:41
2

Eu configuraria uma tabela com suas possíveis entradas e saída desejada em uma planilha diferente:

LigueiparaomeuCodes

EntãoéumasimplesquestãodeumVLOOKUPretornarastringdesejada:

=IFERROR(VLOOKUP(AF2,Codes!A:B,2,FALSE),"")

Isso agora é facilmente expansível se houver novas entradas e saídas, sem a necessidade de alterar a fórmula. Poderíamos adicionar os critérios nad saídas à tabela.

    
por 07.02.2017 / 15:55
0

Seu problema é o modo como você está encadeando as declarações if juntas.

Uma instrução if no excel está sempre no formato:

=IF(CONDITION,VAL IF TRUE, VAL IF FALSE)

Você os tem encadeados como

=IF1(CONDITION1,VAL IF TRUE, VAL IF FALSE, IF2(CONDITION2,...))

Isso não faz sentido, porque você está dizendo

=IF1(CONDITION1,VAL IF TRUE, VAL IF FALSE, SOMETHING ELSE)

Para encadear as declarações, você tem duas opções:

  1. Faça de cada instrução if subseqüente a condição FALSE da instrução if anterior. Então você está dizendo "Se algo é verdade, então envie isso. Se não, vá para a próxima declaração if". na linguagem do Excel:

    =IF(CONDITION1,OUTPUT1,IF(CONDITION2,OUTPUT2,IF(CONDITION3,OUTPUT3,"")))

  2. Concatene um monte de instruções if juntas. Então, é como dizer "se algo for verdadeiro, então imprima isso, se não, em seguida, imprima nada. Além disso, se alguma outra coisa for verdadeira, imprima isso.

    =IF(CONDITION1,OUTPUT1,"") & IF(CONDITION2,OUTPUT2,"") & IF(CONDITION3,OUTPUT3,"")

Observe que, no primeiro caso, assim que uma das condições é satisfeita, a fórmula é concluída, enquanto no segundo caso, todas as condições são sempre testadas. Isso significa que:

  • o método 1 é mais rápido

  • o método 2 funciona quando mais de uma das condições pode ser verdadeira.

Então, com o seu exemplo, você teria

 =IF(OR(AF2="CitiCMT", AF2="AML APAC ATHENA", AF2="AML EMEA", AF2="AML Americas"),"AML",
  IF(OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China"),"CitiScreening",
  IF(OR(AF2="Registrations", AF2="Trade Surveillance - Markets", AF2="Reg-Reporting", AF2="Trade Surveillance
  - IBSG", AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance", AF2="Trade Surveillance - Retail"),"Core Compliance","")))

ou

 =IF(OR(AF2="CitiCMT", AF2="AML APAC ATHENA", AF2="AML EMEA", AF2="AML Americas"),"AML","") & 
  IF(OR(AF2="CitiScreening", AF2="Offshore Wealth Services", AF2="CitiScreening China"),"CitiScreening","") & 
  IF(OR(AF2="Registrations", AF2="Trade Surveillance - Markets", AF2="Reg-Reporting", AF2="Trade Surveillance - IBSG",
  AF2="eCADD", AF2="EmDD", AF2="Trade Surveillance", AF2="Trade Surveillance - Retail"),"Core Compliance","")

No seu caso, uma célula não pode ser "citiscreening" e "registrations", então faz mais sentido usar a primeira, embora se a velocidade não for tão importante, a segunda pode ser mais fácil de ler, e mais fácil de modificar, porque não há um monte de colchetes para combinar.

dicas:

  • Note que você pode quebrar uma fórmula entre linhas pressionando alt + enter, isso facilitará a leitura e não afetará a saída da fórmula.

  • O Excel fornece um útil toolyip que mostra em qual argumento seu cursor está em negrito. Além disso, se você clicar no argumento, ele destacará essa parte da fórmula.

Na sua função original, você pode ver que havia muitos argumentos, porque após o primeiro "" nada fica em negrito.

caso seja útil, aqui está a resposta acima em pseudocódigo:

Opção 1.

if (condition1) then   
    output1
    else if (condition2) then
        output2
            else if (condition3) then
                output3
                    else output nothing

Opção 2:

if (condition1) then   
    output1
else 
    output nothing

if (condition2) then
    output2
else 
    output nothing

if (condition3) then
    output3
else 
    output nothing
    
por 07.02.2017 / 12:00