2016-11-22 19 views
-1

2つの異なるワークシート内の2つの異なる列間に存在する重複数を取得するためにVBAを使用しようとしています。私は以下の構文を持っていますが、返される数値は常に非常に高いです。たとえば、ちょうど一瞬前に、シートの1つをチェックするのに45行しかないときに13041が返されましたか?2つの異なる列とワークシートの重複数を取得

2つの列&枚の間に存在する重複の正確なカウントを返すように、これを調整する方法を教えてください。

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'のものに置き換えたようです。 – arcadeprecinct

答えて

0

いくつかのポイント:

は、なぜあなたは私が手紙を嫌いですか?

varrは、間違った範囲を見ている - あなたはので、私はSheet1であると仮定し、アクティブシート、見てされますRangeではなくSheets("Sheet2").Rangeを使用しています。これを代わりに使用してみてください:

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

最後に、最も重要なのは、これが復活するとは、どういうことですか?最初の2つの行に最初に2番目のシートに1があり、最初の3つの使用された行に2番目のシートが1の場合、この関数は6つの複製があると言います(Sheet1の2つの値のそれぞれに対して3つの一致)。それが正しい

+0

私は2枚のシートの間に存在する重複の数を返すことを望んでいます。 sheet1がbob、frank、fredを持っていて、sheet2がフランクを持っているとしましょう。私は1を返します。両方のシートに1つの名前しか存在しないためです。 – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderByNighシート1が 'bob、frank、fred、frank'でシート2が' frank'の場合はどうなりますか?あなたは2か1が欲しいですか? – arcadeprecinct

+0

あなたのデータに重複がない場合、それは問題ありませんが、Arcadeprecinctが示唆しているように、 'If..Then'構造体を編集したいでしょう。しかし、データに重複がある場合は、重複していないように(おそらく配列内に)それらを追跡する必要があります。 – bobajob

0

ない場合は、matchesをしても2場合、毎にインクリメントされることを意味

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

を行う際Ifの構文は

If condition Then 
    doSomething 
    doSomethingMore 
End If 

または

If condition Then doSomething 

ですエントリが一致しません。あなたはおそらく行うことを意図することは、私はarrvarrが同数の要素を持っている場合、それは平方数でなければなりませんので、それは13041になってしまうだろう、なぜわからない

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

ました。

関連する問題