2016-11-22 2 views
-1

Je tente d'utiliser VBA pour obtenir un nombre de doublons qui existent entre les deux colonnes différentes dans deux feuilles de calcul différentes. J'ai cette syntaxe ci-dessous, mais le nombre retourné est toujours loin à haut. Par exemple, il y a un instant, il a retourné 13041, alors qu'il n'y a que 45 lignes à vérifier dans l'une des feuilles?Get Nombre dédoublonnage entre deux colonnes différentes feuilles de travail et

Comment cela devrait-il être modifié afin qu'il retourne un compte précis des doublons qui existent entre les deux colonnes & feuilles?

Sub CountIF() 
ApplAcatAon.ScreenUpdatAng = False 

DAm stNow As Date 
DAm matches As Anteger 
stNow = Now 
matches = 0 

DAm arr As VarAant 
arr = Sheets("Sheet1").Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value 

DAm varr As VarAant 
varr = Sheets("Sheet2").Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value 

DAm x, y, match As Boolean 
For Each x An arr 
    match = False 
    For Each y An varr 
     Af x = y Then match = True 
     matches = matches + 1 
    Next y 
    Af Not match Then 
     Sheets("Sheet2").Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = x 
    End Af 
Next 

ApplAcatAon.ScreenUpdatAng = True 
End Sub 
+0

Il semble que vous en quelque sorte remplacé tous les '' i's avec A's dans votre code ..? – arcadeprecinct

Répondre

0

Quelques points:

Pourquoi détestez-vous la lettre I?

varr cherche au mauvais choix - vous utilisez Range plutôt que Sheets("Sheet2").Range sera donc à la recherche à la feuille active, que je suppose est Sheet1. Essayez d'utiliser à la place:

With Sheets("Sheet2") 
    varr = .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Value 
End With 

Enfin, et surtout, qu'est-ce que vous attendez exactement de ce retour? Si la première feuille a juste 1 dans les deux premières lignes utilisées, et la seconde feuille a 1 dans les trois premières lignes utilisées, cette fonction vous dira qu'il ya 6 doubles (3 matchs pour chacune des 2 valeurs Sheet1). Si ce n'est pas correct

+0

Je le veux pour retourner un compte des doublons qui existent entre les deux feuilles. Disons que sheet1 a bob, frank, fred et sheet2 a franchement je veux 1 être retourné. comme il n'y a qu'un seul nom qui existe dans les deux feuilles. – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderByNigh si feuille 1 est 'bob, franc, fred, frank' et la feuille 2 est' frank'? Voulez-vous 2 ou 1? – arcadeprecinct

+0

S'il n'y a pas de doublons dans vos données, alors c'est bien, mais vous voudrez éditer votre structure 'If..Then' comme l'a suggéré arcadeprecinct. Cependant, s'il peut y avoir des doublons dans vos données, vous devrez en garder trace (probablement dans un tableau) afin de ne pas compter deux fois. – bobajob

0

La syntaxe de If est

If condition Then 
    doSomething 
    doSomethingMore 
End If 

ou

If condition Then doSomething 

lorsque vous faites

If x = y Then match = True 
matches = matches + 1 

qui signifie matches est incrémentée à chaque fois, même si les deux les entrées ne correspondent pas. Qu'est-ce que vous vouliez probablement dire à faire était

If x = y Then 
    match = True 
    matches = matches + 1 
End If 

Je ne sais pas pourquoi il finirait par être 13041 parce qu'il doit être un nombre carré si arr et varr ont le même nombre d'éléments.