Encontre duplicatas, atualize o banco de dados com valor mínimo no Excel

1

'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 - a pasta de trabalho 1 e a 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.

Copie o A & correspondente Células B em que B tem o valor mínimo junto com outros dados em A & Coluna B e corresponde à Coluna A de WB1 com a Coluna A de WB 2 se a correspondência for encontrada, cole o valor mínimo encontrado entre as duplicatas na Coluna B de WB1 na coluna B de WB2 junto com os outros dados originais nas colunas 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.

[ link

    
por Dan 20.11.2015 / 06:28

1 resposta

0

Como @teylyn já explicou nos comentários, não somos um serviço de escrita de códigos. E para adicionar a isso, seu código é uma bagunça. Vou tentar dar-lhe algumas dicas e espero encorajá-lo a reescrever o seu próprio código.

  • Dim é usado para declarar variáveis. Coloque todas as instruções Dim no topo.
  • Tente entender o que seu código faz e remova todo o código duplicado / não funcional / repetitivo
  • Leia a documentação do Microsoft Technet sobre as funções que você usa. Para a função Match , afirma claramente :

    "The MATCH function will find the largest value that is less than or equal to value. You should be sure to sort your array in ascending order."

  • 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.

  • Não use .Activate para alternar entre pastas de trabalho. Como você definiu dois objetos Workbook , você pode acessar os dados na planilha via WorkbookObject.Range(<etc.>) . Isso torna o 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.
por 02.12.2015 / 10:55