Eu tenho duas pastas de trabalho. Um é enviado por e-mail e possui um gráfico com uma coluna preenchida com as datas, ou seja, 01/11/10 a 30/11/10. Para esse dia, o gráfico é preenchido com uma linha de dados.
A segunda pasta de trabalho também possui um gráfico com uma coluna preenchida com datas. Preciso de ajuda para criar uma macro que analise a data da pasta de trabalho2 e corresponda a essa data com a pasta de trabalho1, enviada por e-mail, e copie a linha de dados da pasta de trabalho1 e cole a linha na pasta de trabalho2 na linha que tem a mesma data . Nunca criei uma macro, então qualquer ajuda seria muito apreciada
Responder1
Eu imagino que uma VLOOKUP
fórmula seria mais fácil do que uma macro neste caso. Depois de preencher a fórmula na coluna, faça COPY & PASTE.Values para remover a fórmula.
Editado no exemplo VLOOKUP: Você precisará criar uma tabela de datas em sua pasta de trabalho idêntica às datas da pasta de trabalho enviada por e-mail. ajuste o seguinte para se adequar à sua situação
A1 = é o valor de pesquisa (data?) Da tabela onde você deseja os valores no e-mail
[Example.xlsx] = é o nome da sua pasta de trabalho enviada por e-mail,
Planilha1! = o nome da planilha na pasta de trabalho enviada por e-mail que contém a tabela de dados
$A$1:$B$30 = o intervalo completo de dados na pasta de trabalho enviada por e-mail
2 = a coluna no intervalo de dados que queremos obter o retorno valor de (coluna 2 em A e B)
FALSE = queremos uma correspondência exata do valor de pesquisa nos dados do e-mail
=VLOOKUP(A1,[Example.xlsx]Sheet1!$A$1:$B$30,2,FALSE)
No entanto, para simplificar, se você não quiser manter uma pasta de trabalho como modelo para receber os dados, o seguinte funcionará. Basta colocá-lo em um módulo da pasta de trabalho modelo e salvá-lo. Ao receber um novo e-mail, abra o modelo, abra a pasta de trabalho de e-mail e ative a macro na pasta de trabalho de e-mail
Suposições no código:
1: Na pasta de trabalho enviada por e-mail, os dados começam na célula A1
2: Na pasta de trabalho de macro/modelo, os dados começam na célula A1
Se alguma dessas suposições estiver incorreta, ajuste os valores iniciais para L1 e/ou as Células objetos (o primeiro valor, L1, é a linha e o segundo número é a coluna; A = 1)
Sub CopyData()
Dim All As New Collection
Dim One As Variant, L1 As Integer, L2 As Integer
Dim TW As Workbook, EW As Workbook
Set TW = ThisWorkbook
Set EW = ActiveWorkbook
L1 = 15
Do Until Cells(L1, 2).Value = ""
ReDim One(0 To 1)
One(0) = Cells(L1, 2).Value
One(1) = Cells(L1, 3).Value
All.Add One
Erase One
L1 = L1 + 1
Loop
TW.Activate
L1 = 15
Do Until Cells(L1, 2).Value = ""
For L2 = 1 To All.Count
One = All(L2)
If One(0) = Cells(L1, 2).Value Then
Cells(L1, 3).Value = One(1)
Erase One
Exit For
Else
Erase One
End If
Next L2
L1 = L1 + 1
Loop
End Sub