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 - 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]


Você tem uma pergunta?
teylyn

Querido @teylyn obrigado por apontar isso. Eu adicionei agora a questão. Por favor, você poderia ajudar a alcançar os resultados acima, como mostrado na imagem.
Dan

Você quer que alguém escreva o código para você? Se sim, você está no lugar errado. Este site não fornece serviços de codificação gratuitos. Qual é o seu código até agora? O que você tentou? Onde você está preso?
teylyn

Respostas:


0

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 as Dimdeclarações 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 das funções que você usa. Para a Matchfunção, afirma claramente :

    "A função CORRESP encontrará o maior valor que é menor ou igual a valor. Você deve ter certeza de classificar sua matriz em ordem crescente."

  • 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 .Activatepara alternar entre pastas de trabalho. Como você definiu dois Workbookobjetos, você pode acessar os dados na planilha via WorkbookObject.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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.