`Sub Update_data ()
Dim Bk1 As Workbook
Dim Bk2 As Workbook
Dim Rng1 As Range
Workbooks("Book1").Activate 'indicate wb name1 here
Set Bk1 = ActiveWorkbook
Workbooks("Book2").Activate 'indicate wb name2 here
Set Bk2 = ActiveWorkbook
Bk1.Activate
Set Rng1 = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 2))
Rng1.Copy
Cells(1, 26).PasteSpecial Paste:=xlPasteValues
Cells(1, 26).AutoFilter
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Rng1.Offset(0, 25), SortOn:=xlSortOnValues, Order:=xlAscending
Cells(1, 26).AutoFilter
Rng1.Offset(0, 25).RemoveDuplicates Columns:=1, Header:=xlYes
Rng1.Offset(1, 25).NumberFormat = "m/d/yyyy"
Dim i As Integer
For i = 2 To Cells(Rows.Count, 26).End(xlUp).Row
Dim x As String
x = Cells(i, 26).Value
Bk2.Activate
Dim y As Integer
On Error Resume Next
y = WorksheetFunction.Match(x, Bk2.Worksheets(1).Columns(1))
Bk2.Worksheets(1).Cells(y, 2) = Bk1.Worksheets(1).Cells(i, 27)
Bk1.Activate
Next i
Rng1.Offset(0, 25).ClearContents`
Por favor me ajude com macro VBA para alcançar o abaixo.
Eu tenho duas pastas de trabalho - pasta de trabalho 1 e pasta de trabalho 2
WB 1 é onde os dados são inseridos. WB 2 é o banco de dados. (Não há duplicatas neste WB)
De WB1 Se houver duplicatas na coluna A, verifique se os valores correspondentes na Coluna B são o valor mínimo das duplicatas.
Em seguida, copie as células A e B correspondentes nas quais B tem o valor mínimo junto com outros dados na coluna A e B e corresponda a Coluna A de WB1 com a Coluna A de WB 2 se encontrar encontrado e cole o valor mínimo encontrado entre as duplicatas na coluna B de WB1 na coluna B de WB2 juntamente com os outros dados originais na coluna A e B em WB1.
Consegui alcançar o que precede com o código anexo criado pelo MAX,
mas encontrou um erro menor durante o teste. Se o WB 2 (banco de dados) estiver em ordem crescente, a macro funcionará bem, mas se o WB2 (banco de dados) não estiver em ordem ou desordenado, deixará algumas das células em branco na coluna B do WB 2.
Também tentei inserir dados sem quaisquer duplicatas no WB1 (coleta de dados col A) e ele retornou com dados incorretos (data - Col B) no WB 2
Anexei a imagem de exemplo para sua análise.
[ https://www.dropbox.com/s/0vq76uvzs2rav3q/NIHL%20data%20Capturesample.xls?dl=0]
Respostas:
Como @teylyn já explicou nos comentários, não somos um serviço de escrita de código. E para adicionar a isso, seu código é uma bagunça. Vou tentar dar-lhe algumas dicas e espero encorajá-lo a reescrever seu código sozinho.
Dim
é usado para declarar variáveis. Coloque todas asDim
declarações no topo.Leia a documentação do Microsoft Technet das funções que você usa. Para a
Match
função, afirma claramente :Coloque alguns comentários acima de cada seção do seu código (a cada 3 a 8 linhas de código), explicando o que ele faz.
.Activate
para alternar entre pastas de trabalho. Como você definiu doisWorkbook
objetos, você pode acessar os dados na planilha viaWorkbookObject.Range(<etc.>)
. Isso torna seu código muito mais rápido e oculta a alternância de pastas de trabalho para o usuário que pressiona o botão.fonte