Macro para substituir a (inútil) função DEGRAU()

A função DEGRAU() serve para dizer se determinado valor é maior ou igual que o parâmetro indicado. Assim ao digitar (no LibreOffice ou Excel) a expressão =DEGRAU( A1 ; B1) o resultado será 1 se A1 for maior que B1 e será 0 se não.
Trata-se, portanto, de uma função completamente inútil, pois o mesmo resultado poderá ser obtido com =(A1>=B1).

Por isso, escrevi uma pequena MACRO que permite estabelecer vários DEGRAUS de uma só vez, para testar em qual degrau se situa determinado valor.

A Sintaxe será a seguinte:

DEGRAUS( A1 ; “Nr1;Nr2;Nr3…”)

Onde:

A1 É a Célula que conterá o valor a ser testado

Nr1, Nr2, Nr3 e etc… será a lista sequencial de degraus a examinar.

A lista de degraus deve estar entre aspas

Os degraus deverão ser valores numéricos, separados por ;

Seria ótimo se essa função fosse incorporada às regulares do LibreOffice.

Eis o Código:

function DEGRAUS( byval Ref as single, PARAM as string) as single
dim x as byte
dim result as single
dim LPar() as single
LPar = Split(PARAM, ";") 
For x = LBound(LPar, 1) To UBound(LPar, 1)
     if ref >= Val(LPar(x)) then 
        result = x + 1
      end if
next
DEGRAUS = result 
end function

Para chamar a função no CALC digite =DEGRAUS(A1;“3;5.7;8;16”)

Fornecerá:
    0 se o valor em A1 for inferior a 3    
    1 se for igual ou maior que 3, mas menor que 5.7   
    2 se for igual ou maior que 5.7, mas menor que 8    
    3 se for igual ou maior que 8, mas menor que 16    
    4 se for igual ou maior que 16

Bom proveito.

Ola @Jedison, eu já usei esta:

=PROC(A1;{0;3;5,7;8;16};{0;1;2;3;4})

Que também não aceita referenciar células, que é uma pena.

Se conseguir aceitar referenciar células, ficaria ÓTIMA, pois seria dinâmica, não seria necessário conhecer os valores antes.

Que é possível usando uma tabela:

Descrição da imagem

Oi, Schiavinatto.
Legal!
Não conhecia esta solução.
Obrigado por compartilhá-la.
Bom usar o SEERRO( para quando o valor checado for maior que os da lista

Não dá ERRO, se valor checado maior que lista, o resultado é o último degrau.

Veja arquivo teste com as três maneiras.

Sim. Você tem razão. O erro só acontece se o valor é inferior ao que está na lista, o que você já solucionou ao começar a listagem por 0.

Eu havia me enganado e quando fui editar o meu comentário já era tarde demais.