2017-11-15 8 views
2

この質問は、このサイトの既存の質問と少し異なりますhere,here & hereExcel VBA - Forループで1〜1レベルの2つの範囲を比較するにはどうすればよいですか?

同じレベル(1対1)で同時に2つの範囲をループし、2つの値が一致するかどうかをチェックするために、Excel VBAでUDFを書く(既存のVBA関数を使用しない)。それは、入力として二つの範囲を取り込み、このUDFで

enter image description here

Public Function compare(r1 As Range, r2 As Range) As Integer 
Dim i 
For Each cell In r1 
    if cell.Value = 'value from r2 at same range level, 1 to 1 compare 
     i = i + 1 
    End If 
Next cell 
compare = i 
End Function 

。簡単にするために、それらが単一の列と等しい行であると仮定します。 For Each cell in Rangeループを使用して、同じセルレベルで2つの範囲を比較したいと思います。これは可能ですか?

ネストされたForを作成する必要があり、すべてのFor内部で、Outer Forのセルと一致するようにそれらの多くのセルをスキップしますか?

答えて

2

番号付きループに変更します。

Public Function compare(r1 As Range, r2 As Range) As long 
    Dim i as long, r as long 
    For r=1 to r1.cells.count 
     if r1.cells(r).Value = r2.cells(r).Value Then 
      i = i + 1 
     End If 
    Next r 
    compare = i  
End Function 

はR2のサイズを変更する変異配列から他の利点は、常に.UsedRangeにR1と規制R1とR2と同じ行X列が存在することができます。

Public Function compare(r1 As Range, r2 As Range) As long 
    Dim i as long, r as long 

    'restrict to .usedrange so full columns can be input 
    set r1 = intersect(r1, r1.parent.usedrange) 
    'make sure r2 is same dimensions as r1 
    set r2 = r2.cells(1).resize(r1.rows.count, r1.columns.count) 

    For r=1 to r1.cells.count 
     if r1.cells(r).Value = r2.cells(r).Value Then 
      i = i + 1 
     End If 
    Next r 
    compare = i  
End Function 
+0

@rajeevをキャッチしてくれてありがとう。 – Jeeped

+0

お返事ありがとうございます。今日何か新しいことを学びました! – rajeev

関連する問題