Pergunte aqui
0

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

perguntadas 2021-01-11 15:43:11 +0200

imagem do gravatar de Jedison

updated 2021-01-11 17:28:11 +0200

imagem do gravatar de Schiavinatto

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.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

1

respondidas 2021-01-11 15:47:48 +0200

imagem do gravatar de Jedison

updated 2021-01-11 16:19:34 +0200

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.

editar assinalar como ofensivo Excluir Link mais

Comentários

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.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-01-11 17:27:16 +0200 )editar

Que é possível usando uma tabela:

Descrição da imagem

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-01-11 17:32:57 +0200 )editar

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

imagem do gravatar de JedisonJedison ( 2021-01-11 17:36:07 +0200 )editar

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

Veja arquivo teste com as três maneiras.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-01-11 17:45:25 +0200 )editar
1

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.

imagem do gravatar de JedisonJedison ( 2021-01-11 18:03:14 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2021-01-11 15:43:11 +0200

Lidas: 22 vezes

Última atualização: Jan 11