Arquivo da tag: funções

Excel – A função NÃO()

Creio ser simples começar com a aplicação do Help do próprio Microsoft Excel:

A função NÃO no Excel inverte o valor do argumento. Use NÃO quando quiser ter certeza de que um valor não é igual a outro valor determinado.

Sintaxe

NÃO(lógico)

Lógico é um valor ou expressão que pode ser avaliado como VERDADEIRO ou FALSO.

Comentários

Se lógico for FALSO, NÃO retornará VERDADEIRO; se lógico for VERDADEIRO, NÃO retornará FALSO.

Exemplo

A B
1 Fórmula Descrição (resultado)
2 =NÃO(FALSO) Reverte FALSO (VERDADEIRO)
3 =NÃO(1+1=2) Reverte uma equação que é avaliada como VERDADEIRO (FALSO)

Aplicação na prática

A aplicação prática da função NÃO é apenas facilitar a leitura de uma determinada função ou código que se escreve.

Por exemplo, supondo que crie em uma célula, B1, o seguinte:

=A1<HOJE()

Que significa que está fórmula está avaliando se o conteúdo da célula A1 é menor a HOJE(), que retorna o dia de hoje. O retorno será o valor lógico VERDADEIRO ou FALSO. Supondo que déssemos a célula B1 o nome ESTA_VENCIDO, o que é um recurso do EXCEL, seria possível escrever uma fórmula desta forma:

=SE(NÃO(ESTA_VENCIDO);FACA_ISSO;FACA_AQUILO)

Ao invés de:

=SE(ESTA_VENCIDO=FALSO;FACA_ISSO;FACA_AQUILO)

Concorda que fica mais fácil de ler? Assim, já deve ser possível imaginar o que pode ser feito, ou pelo menos simplificado. Um moderno e engenhoso cálculo financeiro poderia ser abrigado em uma célula que retorna um valor lógico, permitindo em outros lugares da planilha simplesmente fazer-lhe referência de forma simples, por exemplo:

=SE(FUNCIONARIO_PODE_TIRAR_FERIAS;FACA_ISSO;FACA_AQUILO)

Onde FUNCIONARIO_PODE_TIRAR_FERIAS seria o nome de uma célula que conteria um cálculo que avaliasse a condição descrita.

Com isso em mãos, a imaginação e criatividade de cada um é o limite para o uso desta função.

Bom proveito!

VBA – As diferenças entre Sub e Function

Introdução

O VBA possui dois tipos de estruturas para construção de algoritmos, Sub e Function.

A questão que surge é, quando usar uma ou outra na construção de nossos algoritmos em VBA no Excel? Na prática, Sub e Function trabalham da mesma forma com uma única diferença. A Sub são funções de processamento autônomo enquanto as Functions podem (e devem) retornar valores no final de sua execução.

Veja a estrutura de cada uma:

Sub ExemploSub([parâmetros])
     ' corpo do código
End Sub

onde:

[modificador] são palavras chave que definem o nível de acesso à estrutura de código.

[parâmetros] são variáveis que são passadas na chamada da função e utilizadas dentro. Podem existir vários ou mesmo nenhum parâmetro.

[tipo] é o que informa o tipo de dado a ser retornado pela Function. Pode ser qualquer tipo de dados válido do VBA.

[valor] uma valor que representa o retorno da função. Pode ser uma variável ou um valor constante.

Como saber qual utilizar? Isto depende do contexto da sua aplicação. Quando sua rotina precisar simplesmente executar uma processamento sem emitir qualquer tipo de informação, é aconselhável usar uma Sub. Já quando seu processamento necessitar devolver algum resultado, sem dúvida uma Function é necessária. Supondo uma situação em que você precisa criar funções que executassem operações aritméticas, elas precisariam depois de efetuar os cálculos, devolver o resultado para ser utilizado.

Veja este exemplo:

Public Function SomaSimplesF(x As Long, y As Long) As Long
    SomaSimplesF = x + y
End Function

O código efetua uma operação simples recendo duas variáveis do tipo Long como parâmetro e devolve também um Long (definido na construção da Function) através da chama SomaSimples na linha 2. Para testar as função, basta ir a uma célula da planilha e digitar =SomaSimplesF(1;3). É possível também testar a função através de código VBA, como no código abaixo:

Public Sub TestaSomaSimplesF()
    Dim soma As Long
    'chama a função SomaSimplesF e atribui o resultado à variável soma
    soma = SomaSimplesF(1, 2)
    'mostra o resultado em uma caixa de mensagem
    MsgBox soma
End Sub

Já se este exemplo fosse construído usando uma Sub, não seria possível diretamente retornar o valor como é feito na Function.  A solução então seria mostrá-lo ao usuário, por exemplo em uma caixa de mensagem. Veja este exemplo:

Public Sub SomaSimplesS(x As Long, y As Long)
    MsgBox = x + y
End Sub

Para testar a função, é precisa criar outro bloco de código que faça a chamada a este. Crie a seguinte função para testar o SomaSimplesS:

Public Sub TestaSomaSimplesF()
    'Faz a chamada a Sub SomaSimplesF
    Call SomaSimples(1, 2)
End Sub

Veja que o Sub não tem sequer a opção de mencionar o tipo de dado que pode ser retornado.

No Microsoft Excel, as Functions possuem uma característica especial. Elas podem ser usadas para criação de funções de planilha. A exigência para que isso seja possível, é criá-las com o modificador Public, que é o padrão
caso seja omitido.

Dentro deste entendimento, uma Function sempre poderá assumir o papel de uma Sub, mas não o contrário. Também por isso, o Excel utiliza Functions para criação de funções de planilha personalizadas e Subs para gravação de Macros.

Para superar a limitação do retorno de um único valor ou mesmo conseguir retornar alguns valores em Subs, é necessária a utilização passagem de parâmetros por referência. Este assunto será discutido em outro texto.

Comentários

Alguns podem pensar que por segurança, é melhor sempre criar Functions ao
invés de Subs. Porém, para termos de organização de código e padronização
de suas rotinas em VBA, procure usar a estrutura correta para ter um bom
funcionamento de seu aplicativo.

Excel – Atalhos para Inserir Funções

Inserir função

Para abrir a caixa de diálogo Inserir Função:

Selecione uma célula vazia a pressione Shift+F3.

Para abrir a caixa de diálogo com os argumentos da função:

Selecione uma célula que contém uma fóruma e pressione Shift+F3.

Para inserir uma nova fórmula em uma célula usando a caixa de diálogo com os agumentos da função:

  1. Selecione uma célula vazia e digite a assinatura de uma função, por exemplo, =SOMA.
  2. Sem sair da célula, pressione o atalho Ctrl+A.

Para inserir o texto de ajuda para inserção da fóruma e seu parâmetros:

  1. Selecione uma célula vazia, digite o nome da fórmula, por exemplo, =PROCV.
  2. Pressione o atalho Ctrl+Shift+A. Isso fará com que o tooltip (aquela caixa amarela que aparece no texto de ajuda) seja impressa na função.

Facilita bastante quando se trabalha com fórmulas complexas. É bom lembrar que para a maioria dos atalhos citados, é preciso que o nome completo da função tenha sido informado.

Fonter: EXCELTIP.com

Bom proveito!

Excel VBA – Escrevendo números por extenso

Usando-se o Excel / VBA seria possível escrever-se uma função que após ler um numero na forma tradicional, o converta para forma “por extenso” ? Essa função em outras palavras, deverá ser capaz de ler um valor qualquer inteiro e escreve-lo por extenso (ex:”Quatro Mil Duzentos e Quinze”). Isso é possível ? Ficamos gratos pelo Help.

Public Function EscrevePorExtenso(ByVal n As Double) As String
    Unid = Array("", "Um", "Dois", "Três", "Quatro", "Cinco", _
                 "Seis", "Sete", "Oito", "Nove", "Dez", "Onze", "Doze", _
                 "Treze", "Quatorze", "Quinze", "Dezesseis", "Dezessete", _
                 "Dezoito", "Dezenove", "Vinte")
    Dezen = Array("", "Dez", "Vinte", "Trinta", "Quarenta", _
                  "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa")
    Centen = Array("", "Cento", "Duzentos", "Trezentos", _
                   "Quatrocentos", "Quinhentos", "Seiscentos", _
                   "Setecentos", "Oitocentos", "Novecentos", "Mil")
    Num = n
    Escr = ""
    If n = 0 Then
        Escr = "Zero"
    End If
    If (n \ 1000) &gt; 0 And n \ 1000 &lt; 10 Then         Escr = Unid(n \ 1000) &amp; " Mil "     End If     n = n - (n \ 1000) * 1000     If n &gt; 100 Then
        Escr = Escr &amp; Centen(n \ 100)
    End If
    If n = 100 Then
        Escr = Escr &amp; " Cem"
        GoTo Prossiga
    End If
    n = n - (n \ 100) * 100
    If n &gt;= 20 And n &lt; 100 Then         Escr = Escr &amp; " " &amp; Dezen(n \ 10)     End If     If n &gt; 0 And n &lt; 20 Then         Escr = Escr &amp; " " &amp; Unid(n)         GoTo Prossiga     End If     n = n - (n \ 10) * 10     If n &gt; 0 Then
        Escr = Escr &amp; " " &amp; Unid(n)
    End If
Prossiga:
    If Num Mod 10 &lt;&gt; 0 Then
        If InStr(1, Escr, "Vinte", 1) = 0 Then
            If InStr(1, Escr, "Trinta", 1) = 0 Then
                If InStr(1, Escr, "enta", 1) &gt; 0 Then
                    Escr = Application.Substitute(Escr, "enta", "enta e ")
                End If
            End If
        End If
    End If
    If Num Mod 10 &lt;&gt; 0 Then
        If InStr(1, Escr, "Vinte", 1) &gt; 0 Then
            If InStr(1, Escr, "Trinta", 1) = 0 Then
                If InStr(1, Escr, "enta", 1) = 0 Then
                    Escr = Application.Substitute(Escr, "Vinte", "Vinte e ")
                End If
            End If
        End If
    End If
    If Num Mod 10 &lt;&gt; 0 Then
        If InStr(1, Escr, "Vinte", 1) = 0 Then
            If InStr(1, Escr, "Trinta", 1) &gt; 0 Then
                If InStr(1, Escr, "enta", 1) = 0 Then
                    Escr = Application.Substitute(Escr, "Trinta", "Trinta e ")
                End If
            End If
        End If
    End If
    If Num Mod 100 &lt;&gt; 0 Then
        If InStr(1, Escr, "ento", 1) &gt; 0 Then
            Escr = Application.Substitute(Escr, "Cento", "Cento e ")
        End If
    End If
    If Num Mod 100 &lt;&gt; 0 Then
        If InStr(1, Escr, "entos", 1) &gt; 0 Then
            Escr = Application.Substitute(Escr, "entos", "entos e ")
        End If
    End If
    If Num Mod 1000 &lt;&gt; 0 Then
        If (Num - (Num \ 1000) * 1000) &lt;= 100 Then             If InStr(1, Escr, "Mil", 1) &gt; 0 Then
                Escr = Application.Substitute(Escr, "Mil", "Mil e ")
            End If
        End If
    End If
End Function

A função suporta números até 9999. Não é muito, mas já quebra um galho.

Bom proveito!

Fonte: BestExcel

Tomás Vásquez
www.tomasvasquez.com.br