Notifications
Clear all

CÁLCULOS VBA

3 Posts
3 Usuários
0 Reactions
1,221 Visualizações
(@pokolouko)
Posts: 5
Active Member
Topic starter
 

Pessoal, preciso de uma ajuda com calculo no VBA

Minha duvida se refere a quais comandos posso esta usando para executar X cálculos

Exemplo, primeiro calculo da minha planilha... =0,3073* CÉLULA ^0,4985 essa CÉLULA contem um valor copiado/colado/inserido referente a uma outra aba dentro da planilha
que meu macro copia e leva ate a aba de calculo..

quero automatizar isso com o VBA para tornar mais leve a planilha é possível fazer esses tipos de cálculos no VBA? procurei alguns exemplo na internet e não encontrei um que tirasse minha duvida.

Planilha de exemplo abaixo (sem nada no VBA apenas parte de calculo)

é bastante calculo para extrair um resultado, não sei se ficaria mais leve ou pesada ...

https://drive.google.com/open?id=1uaPgh ... 4PntyQ87SI

 
Postado : 27/09/2019 7:07 am
(@srobles)
Posts: 231
Estimable Member
 

pokolouko,

Se os valores de referência para a base de cálculo forem fixos, experimente o que deixo abaixo:

Sub calcularCelulas()
    With ThisWorkbook.Sheets(2)
        Dim priLinha As Long, ultLinha As Long
        Dim retornaResultado As Double
        Dim valorDeclive As Double
        
        priLinha = 4
        ultLinha = .Cells(4, "B").End(xlDown).Row
        
        Do
            If .Cells(priLinha, "B") <> "" Then
                valorDeclive = .Cells(priLinha, "B")
                
                retornaResultado = 0.3073 * CDbl(valorDeclive) ^ 0.4985
                .Cells(priLinha, "C") = retornaResultado
                .Cells(priLinha, "E") = CDbl(.Cells(priLinha, "D") / .Cells(priLinha, "C") / 60)
            Else
                Exit Do
            End If
                priLinha = priLinha + 1
        Loop While priLinha <= ultLinha - 1
        
        MsgBox "Cálculos efetuados com sucesso!", vbInformation, "Calcular"
        
    End With
End Sub

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 27/09/2019 12:19 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

pokolouko,

Boa tarde!

Infelizmente não tenho como postar seu arquivo de volta pois não tenho acesso aos sites de compartilhamento aqui no meu trabalho. Baixei pelo celular e encaminhei para o meu e-mail.

Uma forma de resolver isso é com o código abaixo. Você pode inserir ele no módulo da Planilha Plan1. Sempre que algo for digitado na coluna B, automaticamente o código vai inserir o resultado na coluna C da linha correspondente a linha que foi alterada na coluna B.

Detalhe, o código abaixo fiz apenas, tomando como exemplo, os valores que estão na sua linha 5, onde B5 = 9, o valor a ser multiplicado é 0,3073 e o valor que eleva o valor de B5 é igual a 0,4985. Ou seja; da forma que fiz, os valores seriam o mesmo para qualquer linha que fosse alterada na coluna B. Desse modo, se os valores de multiplicação e de elevação de cada linha forem diferentes, sugiro que você insira esses valores em colunas separadas e mude a fórmula no código para que possa refletir os mesmos.

Sem alteração (como fiz) seria isso:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 2 And Target.Row > 3 Then
        Range("C" & Target.Row).Value = (0.3073 * (Range("B" & Target.Row).Value ^ 0.4985))
    End If
    Application.EnableEvents = True
End Sub

Com alteração, supondo que o valor a multiplicar esteja na coluna F e o valor a elevar esteja na coluna G, seria o seguinte:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 2 And Target.Row > 3 Then
        Range("C" & Target.Row).Value = (Range("F" & Target.Row).Value * (Range("B" & Target.Row).Value ^ Range("G" & Target.Row).Value))
    End If
    Application.EnableEvents = True
End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 27/09/2019 12:30 pm