Usar fórmulas/funções Excel no VBA

Dividir texto entre colunas usando funções - função Split Excel VBA
Dividir texto entre colunas usando funções – função Split Excel VBA
5 de janeiro de 2015
Gráfico Excel com eixo Y com altura dinâmica VBA
Gráfico Excel com eixo Y com altura dinâmica VBA
7 de janeiro de 2015

Objetivo: Usar fórmulas/funções Excel no VBA.

Worksheet function Excel VBAO Excel VBA como sabem é uma ferramenta que expande muito as funcionalidades do Excel e dos outros programas que compõe o pacote Office.

Dentro do VBA é possível utilizar qualquer uma das funções que são utilizadas normalmente dentro do Excel, auxiliando muito em determinadas tarefas.

Como é possível utilizar qualquer função do Excel, temos á disposição as funções PROCV, CONT.SE, SOMASE, MÉDIA, simplificando a solução de problemas complexos.

Para utilizá-la digite dentro do código VBA WorksheetFunction. e o nome da função. Todas as funções tem que ser em inglês, para isso veja o nome das funções no artigo: http://guiadoexcel.com.br/traducao-das-formulas-excel-ingles-portugues.

Por exemplo a função PROCV, em inglês VLOOKUP, veja um exemplo de código:

Sub Teste()
    
    Dim lValor As Variant
    
    lValor = WorksheetFunction.VLookup("Teste", Sheets("Plan1").Range("A:C"), 2, False)
    
End Sub

Veja no Exemplo que a variável lValor recebe o resultado do PROCV e que a utilização da função PROCV é semelhante á realizada dentro do Excel. Veja:

  1. “Teste” = Valor que será procurado;
  2. Sheets(“Plan1”).Range(“A:C”) = Local aonde estão os dados aonde será realizada a pesquisa;
  3. 2 = Coluna do retorno do valor pesquisado;
  4. False = Define que a pesquisa tem que ser exata, não aproximada.

Caso tenha dúvidas da função PROCV veja o artigo: http://guiadoexcel.com.br/procv-e-proch-excel.

É importante notar que as funções utilizadas devem ser compatíveis com a versão do Excel aonde a planilha será executada, 2003, 2007, 2010, 2013…

Um outro exemplo de função que pode auxiliar muito na programação é a simples função de soma, que dentro do ambiente de programação seria necessário fazer um loop. Exemplo:

msgBox WorksheetFunction.Sum(Range("A:A"))

Então lembre que dentro do VBA você pode utilizar qualquer das funções do Excel e ainda as outras inúmeras possibilidades do Excel VBA.

Abraço

Marcos Rieper


Clique aqui e leia mais sobre Excel VBA. https://www.guiadoexcel.com.br/vba/ O Guia do Excel foi criado por Marcos Rieper e oferece artigos, dicas, tutoriais e modelos de planilhas prontas. Aqui você encontra tudo sobre Excel, seja de nível básico, intermediário,  avançado e VBA. O Guia do Excel oferece diversos materiais completamente gratuitos para download. Navegue em nosso site e confira! Conheça também a nossa Loja do Excel https://loja.guiadoexcel.com.br/
Cursos

Curso Excel Completo – Curso Excel Básico + Curso Excel Avançado – Acesso Vitalício

R$218,00 R$179,00

COMPRAR
Cursos

Curso Excel Master – Curso Excel Básico + Curso Excel Avançado + Curso VBA Excel + LP – Acesso Vitalício

R$357,00 R$249,00

COMPRAR
Cursos

Curso Excel PRO – Curso Excel Avançado + Curso VBA Excel + Lógica de programação – Acesso Vitalício

R$258,00 R$199,00

COMPRAR
Cursos

Curso Excel Web – Curso VBA Excel + Lógica de programação + Curso Web Scraping VBA- Acesso Vitalício

R$388,90 R$309,00

COMPRAR

11 Comentários

  1. Genilton disse:

    Ola camarada!

    Fiz uma rotina VBA (funcao MANDELBROT) eu faço manipulações com numeros complexos
    e retorno uma string.
    Depois, na planilha eu queria usar a função IMABS que calcula o
    modulo de um complexo, porém ao fazer IMABS(MANDELBROT(A, B)) o excel reclama
    do tipo, é como se IMABS só aceitasse numeros complexos ao inves de string.
    E agora como converter uma string em numero complexo?

    Grande abraço

  2. Genilton disse:

    mais precisamente a rotina é esta:

    Public Function MANDELBROT(ByVal parte_real As Double, ByVal parte_imaginaria As Double, ByVal iteradas As Long) As String

    Dim i As Long
    Dim z1 As String
    Dim c As String
    Dim z As String
    Dim p As String

    c = Application.WorksheetFunction.Complex(parte_real, parte_imaginaria)
    z1 = Application.WorksheetFunction.Complex(0, 0)

    For i = 1 To iteradas
    p = Application.WorksheetFunction.ImProduct(z1, z1)
    z = Application.WorksheetFunction.ImSum(p, c)
    z1 = z
    Next

    MANDELBROT = z

    End Function

    depois quero calcular o modulo do complexo que a rotina retorna.
    mas como o retorno é string, o excel reclama.

  3. Rubens Rosa disse:

    Olá Marcos… bacana sua dica. Me ajudou num projeto que tenho aqui. Só precisei adaptar… ficou assim

    Sheets(“Plan1”).Activate
    lbValorVenc.Caption = FormatCurrency( _
    WorksheetFunction.SumIf(Range(“N2:N1048576”), “VENCIDO”, Range(“G2:G1048576”)))

    Onde trouxesse em um Label (lbValorVenc) um resultado da Função SOMASE (SumIf) em formato de moeda (FormatCurrency). Lógico que ativando a planilha certa.

    Funcionou certinho… Obrigado pela dica e parabéns pelo trabalho

  4. Cleo disse:

    =SOMASE($C$2:$C$518;”=CINTIA”;$B$2:$B$518)+SOMA($G$2:$G$518;”=PME”)
    onde esta o erro dessa formula alguem pode me ajudar por favor

    cleo

    • Marcos Rieper disse:

      Olá Cleo, use assim: =SOMASE($C$2:$C$518;”CINTIA”;$B$2:$B$518)+=SOMASE($G$2:$G$518;”PME”;$B$2:$B$518), mas será que você não quer somar se tiver duas condições? Neste caso use o SOMASES.

  5. Fernando Leitão disse:

    Bom Dia desenvolvi uma planilha para somar as celulas por cor estou usando essa fórmula: countCcolor($A$2:$A$9;A14), funciona perfeitamente, apenas que ela não atualiza quando mudo as cores, preciso editar novamente a fórmula ái funciona…………..Existe algum jeito de recalcular automaticamente???

  6. obtive o seguinte erro: NÃO É POSSÍVEL OBTER A PROPRIEDADE VLookup da classe WORKSHEETFUNCTION

  7. Ana Carolina disse:

    Boa tarde,
    Estou usando a função Vlookup para procurar um data em uma matriz e retornar um valor, porém quando eu rodo a macro ela para nessa função, alguém pode me ajudar?

    Sub Vencimento()

    ‘#### Conta linhas que tem valores ####
    ‘Tabela dinâmica
    a = 6
    While Cells(a, 1).Value “”
    a = a + 1
    Wend
    ‘Dados projetados
    b = 3
    While Cells(b, 37).Value “”
    b = b + 1
    Wend

    ‘#### COMANDO PROCV ####
    ‘Table1 = Plan10.Range(Cells(3, 37), Cells(b – 1, 37)) ‘Selecionando uma tabela
    Table2 = Plan10.Range(Cells(6, 1), Cells(a – 1, 2)) ‘Selecionando uma tabela
    linha = 3
    For linha = 3 To b – 1
    Data = Cells(linha, 37)
    Cells(linha, 38).Value = Application.WorksheetFunction.VLookup(Data, Table2, 2, False)
    Next
    End Sub

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.