Ir ao conteúdo

Excel Rotina VBA pra somar intervalo de semana


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Bom dia mestres(as), venho mais uma vez lhes pedir ajuda.

 

Coloquei um arquivo em anexo e a explicação bem detalhda do que eu preciso.

 

Preciso de uma rotina VBA que automatize minha rotina, isso vai fazer poupar muito tempo do meu trabalho. Não estou esplanando aqui o que eu preciso pois é bem confuso, portanto coloquei bem detalhado no excel, la tem exemplos!

 

desde já agradeço muito ajuda de sempre.

exemplo.xlsx

Postado

Uma fórmula para identificar a mudança da semana na célula H não resolve?

 

Ficaria assim,

 

=SE(H2=H3;"";SOMA($I$2:I2)-SOMA($G$1:G1))

 

Cole na G2 e arraste.

  • Obrigado 1
Postado

@Midori infelizmente não é isso que eu preciso,

 

qualquer modificação que deverá ser feita só pode ocorrer na coluna [D] ou fora de qlq coluna que possuem dados.

 

nas células que destaquei lá tem as fórmulas, com elas já explicam o que eu preciso.

 

esse campo que destaque de vermelho já veio pronto do BI, aqui não há necessidade ajustar, mas veja que quando chega *semana 13 coluna [G]*, não me traz a soma da coluna [H] *pra essa semana em especifico* para a coluna [D], pois não houve previsão na **segunda-feira pra esse determinado produto.

 

então são duas coisas que eu preciso, que na coluna [D] me traga esse formato de dados (Fórmula na planilha) sem repetir, note que vai intercalar.

depois some os volumes da semana em questão conforme exemplo também na planilha tanto destado de amarelo quanto os da fórmula que deixei la.

image.thumb.png.1212b978295a690ec7f859ce625d84fd.png

 

**Na planilha deixei explicado sobre a dinâmica da segunda-feira.

Postado

Acho que não entendi o que quer fazer.

 

Mostre como a planilha chega originalmente (sem qualquer edição), assim ela pode ser comparada com a editada com exemplos para saber como deve ficar.

  • Obrigado 1
Postado

@Scofieldgyn Veja se é isso,

 

Sub Macro()
    Dim CampoSemana As Range
    Dim Semana      As Range
    
    Set CampoSemana = _
        Range([A1].CurrentRegion.Columns([G:G].Column).Address)
    
    For Each Semana In CampoSemana.Offset(1)
        If Semana <> Semana.Offset(1) And Semana.Offset(0, -1) = "" Then
            Semana.Offset(0, -3) = Semana & ",2022"
        End If
    Next Semana
End Sub

 

Só coloquei a semana e ficou um pouco diferente do seu exemplo porque eu segui o padrão da planilha com a semana no fim do bloco em vez do começo.

 

  • Obrigado 1
Postado

@Midori está funcionando, porém amostra que eu coloquei aqui foi pequenta, minha base original tem mais de 10 mil linhas e o código só está indo até a linha 175.

 

nessa linha de código parace que está referenciando como tabela, talvez isso esteja limitando.

For Each Semana In Range(Tabela.Columns([G:G].Column).Address)

 

pode ser que eu esteja falando besteira pelo pouco conhecimento que tenho de vba, se houver uma forma de me ajudar ajustar isso.

 

Tanto que peguei minha base original, limpei todo formato existente e coloquei seu código e não executou nada.

  • Solução
Postado

@Scofieldgyn Eu modifiquei o código no post anterior. Sobre ir até a linha 175, com usei CurrentRegion é porque a próxima linha (176) da tabela está toda em branco. CurrentRegion só pega ranges contínuos (sem linhas em branco).

 

Veja se assim resolve o problema de não executar nada. Mas se persistir remova o comando And Semana.Offset(0, -3) = ""

 

Sub Macro()
    Dim CampoSemana As Range
    Dim Semana      As Range
    
    Set CampoSemana = _
        Range([A1].CurrentRegion.Columns([G:G].Column).Address)
    
    For Each Semana In CampoSemana.Offset(1)
        If Semana <> Semana.Offset(1) And Semana.Offset(0, -3) = "" Then
            Semana.Offset(0, -3) = Semana & ",2022"
        End If
    Next Semana
End Sub

 

  • Obrigado 1
Postado

@Scofieldgyn Com a soma fica assim,

 

Sub Macro()
    Dim CampoSemana As Range
    Dim Semana      As Range
    Dim Soma        As Currency
    
    Set CampoSemana = _
        Range([A1].CurrentRegion.Columns([G:G].Column).Address)
    
    For Each Semana In CampoSemana.Offset(1)
        Soma = Soma + Semana.Offset(0, 1)
        If Semana <> Semana.Offset(1) Then
            If Semana.Offset(0, -3) = "" Then
                Semana.Offset(0, -3) = Semana & ",2022"
                Semana.Offset(0, -1) = Soma
            End If
            Soma = 0
        End If
    Next Semana
End Sub

 

  • Obrigado 1
Postado

@Midori  na planilha que eu anexei no inicio de nossa conversa, seu código está funcionamento perfeitamente, porém tive que adpatar seu código na planilha original, mudei os address, só que não estou conseguindo somar corretamente a coluna [F], veja que após executar a macro, está somando apenas as últimas duas células da [F], o que eu estou fazendo de errado?

 

image.thumb.png.40f3c0ce53965525e3669aefaaeeca2f.png

Postado

@Midori o problema mesmo com esse no código atualizado, eu não consigo organizar a ordem das colunas, esse deslocamento offset, porque na planilha inicial, tinhas muitas colunas, seu código funciona, mas quando eu coloco nessa nova planilha que tem menos colunas eu não sei adpatar pra fazer o deslocamento correto.

 

 

@Midori ignora, seu código anterior estava correto, eu que fechei o if no lugar errado.

 

obrigado mais uma vez.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!