@JosenildoA
Uma coisa que estranhei é que em um campo está escrito Vrl e em outro está escrito Vlr.
Seu código é bem parecido com o do vídeo abaixo, talvez tenha se inspirado nele:
https://youtu.be/oGFh634OUaE
Do jeito que você fez o código, creio que vai gerar erro se a função SUMIFS não encontrar valores correspondentes.
Neste caso, indico que assista a este vídeo:
https://youtu.be/qSEjhOKIq4c
Você disse que por fórmula ficou lento.
Nunca vi um código VBA ser mais rápido que uma fórmula, mas, enfim, a planilha é sua e você faz o que achar melhor com ela.
Caso queira aprender a fazer um código que possa ser mais ágil, assista a este vídeo:
https://youtu.be/CTq_aV6XSwU
Corrigindo o seu código:
Option Explicit
Sub Carteira()
Dim shDados As Worksheet
Dim shBase As Worksheet
Set shDados = Sheets("Dados")
Set shBase = Sheets("Base")
shDados.Range("C3") = Application.WorksheetFunction.SumIfs(shBase.Range("C:C"), _
shBase.Range("B:B"), ">=" & CDate(shDados.Range("B3")), _
shBase.Range("B:B"), "<=" & CDate(WorksheetFunction.EoMonth(shDados.Range("B3"), 0)))
End Sub
No campo Data, existe um espaço em branco, o que gerou um dos erros.
Outro erro foi que você se esqueceu de colocar WorsheetFunction.EoMonth.
Outro erro foi que você se esqueceu de colocar um ) após B3.
Fiz um vídeo corrigindo os erros:
https://youtu.be/ANcBH98DnS8
Sim, o VBA é feito de detalhes, o que faz muitas pessoas reclamarem que é difícil aprender VBA e até desistam.
Sub Carteira()
Dim shDados As Worksheet
Dim shBase As Worksheet
Set shDados = Sheets("Dados")
Set shBase = Sheets("Base")
shDados.Range("C3") = Application.WorksheetFunction.SumIfs(shBase.Range("Tab_Base[Vrl Bruto]"), _
shBase.Range("Tab_Base[Data ]"), ">=" & shDados.Range("B3"), _
shBase.Range("Tab_Base[Data ]"), "<=" & WorksheetFunction.EoMonth(shDados.Range("B3"), 0))
End Sub
Por esses detalhes chatos do VBA é que evito usar funções prontas do Excel.
Inclusive, já vi muitas pessoas acharem mais fácil criar um código VBA que colocar uma fórmula em uma célula.
Eu mesmo faço as somas, contagens, médias, buscas... através de laços de repetição. Sem usar SUMIF, SUM, VLOOKUP etc.
Mas, se você prefere usar as funções prontas do Excel no VBA, fica a seu critério.
Fiz um vídeo sobre soma de acordo com o mês e o ano:
https://youtu.be/n5Q6VDkl-TU
Código que fiz:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LINHABASE As Long
Dim LINHADADOS As Long
Dim SOMAC As Double
Dim SOMAD As Double
Dim SOMAE As Double
LINHADADOS = 3
While shDados.Range("B" & LINHADADOS).Value <> ""
SOMAC = 0
SOMAD = 0
SOMAE = 0
If UCase(shDados.Range("F" & LINHADADOS).Value) = "X" Then
LINHABASE = 3
While shBase.Range("B" & LINHABASE).Value <> ""
If Month(shBase.Range("B" & LINHABASE).Value) = Month(shDados.Range("B" & LINHADADOS).Value) Then
If Year(shBase.Range("B" & LINHABASE).Value) = Year(shDados.Range("B" & LINHADADOS).Value) Then
SOMAC = SOMAC + shBase.Range("C" & LINHABASE).Value
SOMAD = SOMAD + shBase.Range("D" & LINHABASE).Value
SOMAE = SOMAE + shBase.Range("E" & LINHABASE).Value
shDados.Range("C" & LINHADADOS).Value = SOMAC
shDados.Range("D" & LINHADADOS).Value = SOMAD
shDados.Range("E" & LINHADADOS).Value = SOMAE
End If
End If
LINHABASE = LINHABASE + 1
Wend
End If
LINHADADOS = LINHADADOS + 1
Wend
End Sub
Este post foi modificado 4 anos atrás 21 vezes por
Anderson Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.
Postado : 24/04/2021 6:02 pm