2016-11-22 40 views
-1

我想用VBA來獲取兩個不同工作表中兩個不同列之間存在的重複計數。我有下面的語法,但返回的數字總是很高。例如,就在剛纔它返回13041時,當只有45行檢查其中一張表時?獲取兩個不同的列和工作表之間的重複計數

這應該如何調整,以便它返回兩列&表之間存在的重複的準確計數?

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

看來,你以某種方式取代了所有的'我'與'A's在你的代碼..? – arcadeprecinct

回答

0

的幾點:

你爲什麼討厭我的信?

varr正在尋找在錯誤的範圍內 - 您使用Range而不是Sheets("Sheet2").Range這樣定定地看着活動工作表,我以爲是Sheet1。嘗試使用此代替:

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

最後,最重要的是,你究竟期待這返回?如果前兩個使用行中的第一個工作表只有1,而第二個工作表中的第二個工作表中有1,則此函數會說有6個重複項(Sheet1中的每個值都有3個匹配項)。如果這不是正確的

+0

我想讓它返回兩張表之間存在的重複計數。假設sheet1有bob,frank,fred,並且sheet2坦率地說我想要返回1。因爲這兩張紙上只有一個名字。 – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderByNy如果表單1是'bob,frank,fred,frank'並且表單2是'frank'?你想要2還是1? – arcadeprecinct

+0

如果你的數據中沒有重複,那很好,儘管你想要像arcadeprecinct建議的那樣編輯你的'If..Then'結構。但是,如果數據中可能存在重複,則需要跟蹤這些數據(可能位於數組中),以免重複計算。 – bobajob

0

If的語法

If condition Then 
    doSomething 
    doSomethingMore 
End If 

If condition Then doSomething 

當你做

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

這意味着matches每經過一次,即使兩個條目不匹配。你大概意思做的是

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

我不知道爲什麼它會最終被13041,因爲它應該是一個平方數,如果arrvarr有相同數目的元素。

相關問題