9
respostas

Macro para Selecionar Intervalo de Datas Específicas

Olá! Estou com dificuldade de criar uma macro que execute o seguinte:

Buscar e selecionar um intervalo de dados contido entre duas datas diferentes.

Eu estou digitando a data inicial em h14 e a data final em h15. Tentei criar um script que busque no intervalo de A8:E141, na coluna A, as datas que especifiquei e selecione todas as células entre as duas datas (indo depois até a coluna E), para eu poder copiá-las para outro local. Mas não consegui definir esse range. Alguém sabe como faz isso? Obrigado!

9 respostas

Olá Kaue tudo bem com você??

Você poderia mandar seu script por favor? Assim consigo visualizar melhor e buscar a solução para te ajudar!

Fico no seu aguardo!

Oi, Victor! Obrigado por ajudar.

Eu sei que o código pode estar bem errado, mas não sei como fazer mesmo...

'Criei duas variáveis para receber o valor  das datas que estão em h14 e h15:
Dim data_inicial As Variant
Dim data_final As Variant

data_inicial = Range("h14")
data_final = Range("h15")

'Quero encontrar e selecionar a data_inicial no intervalo (A8:A141) que estão as datas:

Range.Find(data_inicial, a7).Select

'Quero selecionar as células subsequentes até encontrar a data_final e expandir a seleção até a coluna E ao lado da seleção atual:
Do Until ActiveCell = dataFinal

Range(ActiveCell.Offset(1, 4)).Select

Loop


End Sub

Geralmente no curso a gente tinha uma célula fixa para começar e um intervalo bem definido, mas nesse caso que o intervalo depende da indicação a cada consulta eu não consegui fazer.

Kaue eu confesso que ainda estou confuso como poderei te ajudar, pois não consegui compreender como sua tabela está composta e aí para trabalhar nos intervalos e buscar o que você precisa fica difícil. Você poderia disponibilizar a planilha por um link para download? Como no site do wetransfer ou link pro arquivo no google drive? Peço desculpas por não ter solicitado isso anteriormente, mas acreditei que conseguiria vendo o script.

Fico no aguardo!

Oi, Victor! Eu salvei um arquivo de exemplo no seguinte link:

https://drive.google.com/file/d/1hSkbHwB-LWuoge-CECmBTxMlSBR2rx9a/view?usp=sharing

Obrigado!

Oi Kaue, fiz uns testes aqui

Verifica se te atende, acredito que vá precisar de alguns ajustes, mas deve clarear bem para o uso e aí ficar mais fácil de continuar implementando.

Sub simulador()
    Application.ScreenUpdating = False
    Range("a8").Select
    Range("a8:e17").Cut
    Workbooks("dados.xlsm").Activate
    Range("j8").PasteSpecial
    Application.ScreenUpdating = True
End Sub

Fico no aguardo!

Oi, Victor! Então, essa parte é a que eu não tinha tentado ainda, mas seria essa a ideia para fazer a transferência dos dados.

O que está pegando mesmo é a parte de selecionar o intervalo, que eu ainda não sei fazer.

A lógica seria a seguinte:

1) ler o valor da célula h14;

2) clicar na célula a7;

3) buscar abaixo de a7 o valor de h14;

4) quando achar o valor = de h14: selecionar;

5) ler o valor de h15;

6) buscar o valor de h15 abaixo da célula selecionada anteriormente e selecionar as células abaixo até achar a célula com valor de h15;

7) quando achar a célula com valor = de h15, parar esse looping.

(Até aqui teremos uma seleção de várias células na coluna A que formam o intervalo definido em h14 e h15)

8) expandir a seleção até a coluna E.

Final: teremos o intervalo total selecionado.

Exemplo:

h14= 01/10/2018 e h15=01/01/2019

A8=01/09/2018 (não selecionar, descer uma linha, verificar se o valor =01/10/2018)

A9= 01/10/2018 (selecionar, descer uma linha (mantendo a seleção), verificar agora se é= 01/01/2019)

A10=01/11/2018 (selecionada, descer uma linha)

A11=01/12/2018 (selecionada, descer uma linha)

A12=01/01/2019 (selecionar, parar looping, expandir a seleção até a coluna E)

Seleção final: A9 até E12

Depois viria essa parte que você me enviou.

Obrigado novamente pela ajuda.

Olá Kaue, com essa nova parte eu não sei se entendi ou se conseguirei te ajudar, vou fazer contato com o instrutor para auxiliar nessa parte tá bom?

Ok, Victor, aguardarei o contato do instrutor. Obrigado!

Olá Pessoal!

Acredito que encontrei a solução. Você precisa encontrar qual célula é a inicial e guardar o valor do endereço dela, depois encontrar a célula final e também guardar o endereço dela numa variável. Depois copiar o conteúdo entre a célula inicial e a célula final. Segue o spoiler:

Sub busca_seleciona()

Dim data_inicial As Variant
Dim data_final As Variant
Dim sel_inicial As Variant
Dim sel_final As Variant

data_inicial = Range("h14")
data_final = Range("h15")

' Encontra a data inicial e seleciona
' Os argumentos what:= e after:= são opicionais
Range("A:A").Find(what:=data_inicial, after:=Range("a7")).Select

' Adiciona o endereço da celula atual ("A8")
sel_inicial = ActiveCell.Address

Do Until ActiveCell.Value = data_final

    ' Seleciona a célula de baixo
    ActiveCell.Offset(1, 0).Select

    ' Sobrescreve a variável com o endereço que está selecionado atualmente até a última ("A17")
    sel_final = ActiveCell.Address

Loop

' Agora atribui um novo valor para sel_final para ser relativo
' a quarta coluna do último registrto ("E17")
Range(sel_final).Select
sel_final = ActiveCell.Offset(0, 4).Address

' Copia os dados de ("A8:E17")
Range(sel_inicial, sel_final).Copy

' Cola os dados em uma área de exemplo, no caso a partir de "S3"
Range("S3").PasteSpecial

End Sub

Espero ter ajudado!