Notifications
Clear all

Soma dos 10 ùlt. mostrando a data que está coluna ao lado

8 Posts
2 Usuários
0 Reactions
1,762 Visualizações
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Boa tarde, gente.

No cód. abaixo tenho a instrução para que seja somado as 10 ultimas linhas anteriores à ultima linha preenchida da coluna "B"; ....a variável "total" armazena esse valor... Na coluna "A" tenho as datas que correspondem a cada um dos valores constantes na coluna "B" .... Mais a frente no meu código faço uma comparação com o valor armazenado na variável "total" para checar se foi ultrapassado o valor de 50 (exemplo), porém precisarei da data correspondente a linha onde foi ultrapassado o valor...

Este é problema não estou conseguindo pensar em como escrever isso utilizando "for" ...

With wshComum
    
    UltCel = .Cells(.Rows.Count, 2).End(xlUp).Row
    'SOMA DAS 12 ULTIMAS LINHAS OU QUANTIDADE MENOR QUE 12 E ARMAZENA NA VARIÁVEL "total"
    For i = UltCel To UltCel - 9 Step -1
        If i > 1 Then
            total = total + CDbl(Range("B" & i).Value)
        Else
            Exit For
         End If
    Next

End With

Muito obrigado pelo tempo e conhecimento Cedidos!

 
Postado : 13/06/2018 10:20 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

AMORIM123,

Boa tarde!

Veja se é assim.

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 : 13/06/2018 10:50 am
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Bom dia, wganer!

Creio que minha questão esteja para ser resolvida, porém quando repassei a questão ainda não havia mentalizado ela por completo; Vc me ajudou no problema que foi colocado, porém ocorre que a parte que faltava da questão refere-se:

Recapitulando:
Havia solicitado que fosse armazenado o total da soma das 10 últimas células anteriores à última célula preenchida da coluna "B" na variável "soma" e que fosse exibida a data correspondente na coluna"A", aonde foi ultrapassado o valor R$ 50,00.

Na sequência tu me responde com "Range("A" & i).Value" concatenado na msgbox...show!

Implementação:
Porém, wagner... há mais uma questão: ...Nessa totalização, que é armazenada na variável "soma", se ultrapassado R$ 50,00; preciso que seja verificada somente dentro do ano atual, sempre dentro do ano atual, até a data de hoje (Considerando apenas o mês) mostrando em que data correspondente foi ultrapassado o valor limite.

Exemplo:

Estamos em 06/2018

E em janeiro/2018 - R$ 33,00

Em fevereiro - R$ 10,00

Em março - R$ 8,00

Em abril - R$ 12,00

Em maio - R$ 22,00

Em junho - R$ 9,00

Dessa forma houve a ultrapassagem do limite de R$ 50,00 em março/2018 essa data deveria ser exibida para mim ..pode ser numa msgbox, ..armazenada numa célula na planilha.. Tendo ultrapassado, independente dos demais valores até a data atual, a data em que houve a ultrapassagem é à data deve ser exibida.

Desde já muito obrigado pelo tempo e conhecimentos disponibilizados!

Segue planilha!

 
Postado : 15/06/2018 5:47 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

AMORIM123,

Bom dia!

Não sei se entendi...
Veja se é assim.

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 : 15/06/2018 7:26 am
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Olá, wagner.

Deu certo aqui.. conforme havia solicitado em minha ajuda, agora se eu quiser armazenar ou mostrar em msgbox a data da ultima célula da coluna "A" (data)

Fiz dessa forma, mas está mostrando 13/01/1900

Sub Somar()
    Dim UltCel As Long
    Dim i As Long
    Dim Soma As Double
    Dim UltDate As Date
    
    UltCel = Sheets("Comum").Cells(Sheets("Comum").Rows.Count, 2).End(xlUp).Row
    
    UltDate = Sheets("Comum").Cells(Sheets("Comum").Rows.Count, 1).End(xlUp).Row
    
    For i = UltCel To UltCel - 9 Step -1
        If i > 1 Then
            Soma = Soma + CDbl(Range("B" & i).Value)
            If Soma > 50 And Year(CDate(Range("A" & i).Value)) = Year(Date) Then
                
                If Sheets("Comum").Cells(2, 9).Value = "" Then
                    'Para saber se é a primeira vez que é ultrapassado o limite de R$ 50,00
                    'salvo a data correspondente na coluna 9 para sempre informar ao usuário
                    MsgBox ("Na competência " & DatePart("m", UltDate) & "/" & DatePart("yyyy", UltDate) & " o limite Anual foi excedido"), vbOKOnly
                    Sheets("Comum").Cells(2, 9).Value = CDate(UltDate)
                Else
                    ' se já estava preenchida então é uma segunda averiguação
                    MsgBox ("Na competência " & DatePart("m", Sheets("Comum").Cells(2, 9).Value) & "/" & DatePart("yyyy", Sheets("Comum").Cells(2, 9).Value) & " o limite Anual foi excedido"), vbOKOnly

                End If
               ' GoTo SAI
            End If
        Else
            Exit For
        End If
    Next
'SAI:
'    Range("B" & UltCel + 1).Value = Soma
End Sub

Pois irei precisar saber qual a última data a partir da qual o limite foi alcançado ou ultrapassado.

Desde já obrigado pelo tempo e conhecimento!

 
Postado : 19/06/2018 8:54 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

AMORIM123,

Boa tarde!

Não entendi bem o que você disse. O fata da data está saindo da forma que você mencionou (13/01/1900) é porque a sua segunda linha de código não está armazenando uma data. Ela está armazenando o número da último linha com dados, pela coluna A e tentando transformar em Data já que a variável está definida como Date.

'Esta linha não armazena uma data
UltDate = Sheets("Comum").Cells(Sheets("Comum").Rows.Count, 1).End(xlUp).Row

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 : 19/06/2018 10:40 am
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

humm.

corrigir da seguinte forma:

'agora ele carrega o valor dentro da celula
UltDate = Sheets("Comum").Cells(Sheets("Comum").Rows.Count, 1).End(xlUp).Value

ficou assim

Sub Somar()
    Dim UltCel As Long
    Dim i As Long
    Dim Soma As Double
    Dim UltDate As Date
    
    UltCel = Sheets("Comum").Cells(Sheets("Comum").Rows.Count, 2).End(xlUp).Row
    
    UltDate = Sheets("Comum").Cells(Sheets("Comum").Rows.Count, 1).End(xlUp).Value
    
    For i = UltCel To UltCel - 9 Step -1
        If i > 1 Then
            Soma = Soma + CDbl(Range("B" & i).Value)
            If Soma > 50 And Year(CDate(Range("A" & i).Value)) = Year(Date) Then
                
                If Sheets("Comum").Cells(2, 9).Value = "" Then
                    'Para saber se é a primeira vez que é ultrapassado o limite de R$ 50,00
                    'salvo a data correspondente na coluna 9 para sempre informar ao usuário
                    MsgBox ("Na competência " & DatePart("m", CDate(UltDate)) & "/" & DatePart("yyyy", CDate(UltDate)) & " o limite Anual foi excedido"), vbOKOnly
                    Sheets("Comum").Cells(2, 9).Value = CDate(UltDate)
                Else
                    ' se já estava preenchida então é uma segunda averiguação
                    MsgBox ("Na competência " & DatePart("m", Sheets("Comum").Cells(2, 9).Value) & "/" & DatePart("yyyy", Sheets("Comum").Cells(2, 9).Value) & " o limite Anual foi excedido"), vbOKOnly

                End If
               ' GoTo SAI
            End If
        Else
            Exit For
        End If
    Next
'SAI:
'    Range("B" & UltCel + 1).Value = Soma
End Sub
 
Postado : 19/06/2018 10:55 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Ok.

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 : 19/06/2018 11:04 am