2010-08-05 5 views
1

J'ai 2 feuilles séparées, appelons-les feuille A, feuille B. J'ai des données dans la feuille B qui est également dans la feuille A. Je veux trouver les lignes qui sont égales et les retirer de la feuille B.Excel/VBA Supprimer les lignes dupliquées en croisant 2 feuilles différentes puis en supprimant 1 ligne

Je ne peux pas combiner les 2 feuilles et utiliser les filtres parce que je fais du SQL dynamique pour interroger différentes données.

Chaque feuille a une colonne clé unique

Je suis ok avec des suggestions VBA et formules Excel. Aussi longtemps que je ne combine pas les feuilles.

Merci beaucoup les gars! Désolé, apparemment j'ai fait une erreur. Il y a une boucle infinie ici quelque part. C'est la réponse de Ben btw. Je viens de republier une version compilable.

Sub CleanDupes() 
    Dim wsA As Worksheet 
    Dim wsB As Worksheet 
    Dim keyColA As String 
    Dim keyColB As String 
    Dim rngA As Range 
    Dim rngB As Range 
    Dim intRowCounterA As Integer 
    Dim intRowCounterB As Integer 


    keyColA = "A" 
    keyColB = "A" 

    intRowCounterA = 1 
    intRowCounterB = 1 

    Set wsA = Worksheets("Sheet2") 
    Set wsB = Worksheets("Sheet1") 

    Do While Not IsEmpty(wsA.Range(keyColA & intRowCounterA).Value) 


     Set rngA = wsA.Range(keyColA & intRowCounterA) 

     intRowCounterB = 1 
     Do While Not IsEmpty(wsB.Range(keyColB & intRowCounterB).Value) 

      Set rngB = wsB.Range(keyColB & intRowCounterB) 

      If rngA.Value = rngB.Value Then 

       Rows(intRowCounterB).EntireRow.Delete 
       intRowCounterB = intRowCounterB - 1 


      End If 
       intRowCounterB = intRowCounterB + 1 
     Loop 
     intRowCounterA = intRowCounterA + 1 
    Loop 
End Sub 

Répondre

1
Sub CleanDupes() 
    Dim wsA As Worksheet 
    Dim wsB As Worksheet 
    Dim keyColA As String 
    Dim keyColB As String 
    Dim rngA As Range 
    Dim rngB As Range 
    Dim intRowCounterA As Integer 
    Dim intRowCounterB As Integer 
    Dim strValueA As String 


    keyColA = "A" 
    keyColB = "B" 

    intRowCounterA = 1 
    intRowCounterB = 1 

    Set wsA = Worksheets("Sheet A") 
    Set wsB = Worksheets("Sheet B") 

    Do While Not IsEmpty(wsA.Range(keyColA & intRowCounterA).Value) 
     intRowCounterB = 1 
     Set rngA = wsA.Range(keyColA & intRowCounterA) 
     strValueA = rngA.Value 
     Do While Not IsEmpty(wsB.Range(keyColB & intRowCounterB).Value 
      Set rngB = wsB.Range(keyColB & intRowCounterB) 
      If strValueA = rngB.Value Then 
       'Code to delete row goes here, but I'm not sure exactly' 
       'what it is.' 
       wsB.Rows(intRowCounterB).Delete 
       intRowCounterB = intRowCounterB - 1 
      End If 
      intRowCounterB = intRowCounterB + 1 
     Loop 
     intRowCounterA = intRowCounterA + 1 
    Loop 
End Sub 

Cela devrait vous commencer.

+0

Salut Ben, j'ai essayé votre suggestion et cela n'a pas fonctionné. J'ai changé la ligne de ligne de suppression à ---- wsB.Range (Rows (intRowCounterB)). EntireRow.Delete mais cela n'a pas fonctionné ainsi aucune idée quant à ce qui pourrait être le problème? Merci! – EKet

+0

@Ehsan Avez-vous parcouru le code pour voir si cela fonctionne correctement? J'ai écrit tout ce code hier soir sans qu'Excel ne soit à portée de main, alors même si cela semblait correct à l'époque, je n'ai pas eu l'occasion de le déboguer complètement. Notez également que vous devrez peut-être modifier les noms des feuilles de "Feuille A" et "Feuille B" 'dans votre code. –

+0

Ben, merci pour la réponse. En fait, j'ai changé le code pour ce qui est de la dénomination ... pas de problème, mais je n'ai pas lu le code pour vérifier la syntaxe, car je suis très novice avec VBA, donc je vous ai cru sur parole. Je vais prendre cela comme une opportunité d'apprentissage et aller apprendre la syntaxe et revenir à vous. Merci. – EKet

Questions connexes