2016-11-22 5 views
-1

Ich versuche, VBA zu verwenden, um eine Anzahl von Duplikaten zu erhalten, die zwischen zwei verschiedenen Spalten in zwei verschiedenen Arbeitsblättern vorhanden sind. Ich habe diese Syntax unten, aber die zurückgegebene Zahl ist immer viel zu hoch. Zum Beispiel hat es gerade eben 13041 zurückgegeben, wenn es nur 45 Zeilen gibt, die in einem der Blätter eingecheckt werden?Anzahl der Duplikate zwischen zwei verschiedenen Spalten und Arbeitsblättern abrufen

Wie soll dies optimiert werden, so dass es eine genaue Anzahl von Duplikaten gibt, die zwischen den beiden Spalten & Blätter existieren?

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

Es scheint, dass Sie alle 'i's durch' A' in Ihrem Code ersetzt haben ..? – arcadeprecinct

Antwort

0

Einige Punkte:

Warum hassen Sie den Brief, den ich?

varr ist im falschen Bereich suchen - Sie Range eher verwenden als Sheets("Sheet2").Range so bei dem aktiven Blatt wird suchen, was ich davon ausgehen, ist Sheet1. Versuchen Sie es stattdessen:

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

Schließlich, und am wichtigsten, was genau erwarten Sie, dass dies zurückkehrt? Wenn das erste Blatt 1 in den ersten zwei verwendeten Zeilen und das zweite Blatt 1 in den ersten drei verwendeten Zeilen hat, sagt diese Funktion, dass es 6 Duplikate gibt (3 Übereinstimmungen für jeden der 2 Werte in Sheet1). Wenn das nicht richtig

+0

Ich möchte, dass es eine Zählung der Duplikate gibt, die zwischen den zwei Blättern existieren. Nehmen wir an, sheet1 hat bob, frank, fred und sheet2 hat frank Ich möchte 1 zurückgegeben werden. da es nur einen Namen gibt, der in beiden Blättern existiert. – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderByNigh Was ist, wenn Blatt 1 'bob, frank, fred, frank' ist und Blatt 2' frank' ist? Willst du 2 oder 1? – arcadeprecinct

+0

Wenn es keine Duplikate in Ihren Daten geben kann, dann ist das in Ordnung, obwohl Sie Ihre 'If..Then'-Struktur bearbeiten möchten, wie Arcadeprecipct vorgeschlagen hat. Wenn sich jedoch in Ihren Daten Dubletten befinden, müssen Sie diese (wahrscheinlich in einem Array) im Auge behalten, damit Sie nicht doppelt zählen. – bobajob

0

Die Syntax für If ist

If condition Then 
    doSomething 
    doSomethingMore 
End If 

oder

If condition Then doSomething 

wenn Sie

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

tun, das bedeutet matches jedes Mal erhöht wird, auch die, wenn zwei Einträge stimmen nicht überein. Was Sie wahrscheinlich gemeint zu tun war

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

Ich bin nicht sicher, warum es 13.041 sein würde am Ende, weil es eine Quadratzahl sein soll, wenn arr und varr die gleiche Anzahl von Elementen haben.

Verwandte Themen