About Me

A minha foto
JRod - PORTUGAL
Microsoft [MVP] - Excel (10º ano consecutivo)
Ver o meu perfil completo
Com tecnologia do Blogger.

Seguidores

Estatisticas

Free Blog Counter

eXTReMe Tracker
2007-05-23

Por mail, recebi a seguinte pergunta: "Tenho o office 2003 instalado e necessito de colocar numa fórmula mais de sete "IF's" consecutivos, pois estou a comparar valores do mês actual com valores de meses anteriores. Como fazer?"

Como é sabido, o Excel apenas permite até 7 IF's [Função IF()] aninhados.

Uma das maneiras de obviar este pequeno problema, será utilizar uma UDF [User Defined Function] que permita estabelecer mais do que 7 critérios.

A UDF que apresento a seguir [a qual deverá ser copiada para um módulo de VBA, utilizando ALT + F11, para a ceder ao Editor de VBA e criando um novo módulo - Insert > Module -], possibilita a utilização de tantos critérios, quantos os que sejam necessários, embora se verifique que, quantos mais critérios, mais lento se tornará o cálculo, como é evidente.

 

O Código (créditos para Harlan Grove - ver perfil):

Function multi_if(ParamArray a() As Variant) As Variant
    Dim i As Long, n As Long

    n = UBound(a)

    If n Mod 2 = 0 Then
        multi_if = a(UBound(a))
        n = n - 1
    Else
        multi_if = False
    End If


    For i = 0 To n Step 2
        If CBool(a(i)) And i < n Then
            multi_if = a(i + 1)
            Exit For
        End If
    Next i
End Function


E, agora, apresento a máscara de utilização da função:

=multi_if (condition_a;value_a;condition_b;value_b;condition_c;value_c;
condition_d;value_d;condition_e;value_e;condition_f;value_f;
condition_g;value_g;condition_h,value_h;value_else)

 

O exemplo:

  =multi_if(AP4=0;0;$D4<>0;AP4/$D4;$J4<>0;AP4/$J4;$N4<>0;AP4/$N4;$R4<>0;AP4/$R4;$V4<>0;AP4/$V4;$Z4<>0;AP4/$Z4;$AD4<>0;AP4/$AD4;$AH4<>0;AP4/$AH4;$AL4<>0;AP4/$AL4;1)

 

  • Tópicos relacionados:

Nested IF's - Chip Pearson

How to avoid nested If's in Excel - Mark Kelly