2016-11-22 58 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有相同数目的元素。

相关问题