2017-11-17 9 views
0

マクロを実行すると、L6:L29の値、行と行、M6:M29の値が一致するとメッセージが表示されます。完全一致の2つの範囲を比較するExcelマクロ

これを書くために長いと非効率的な方法があるかもしれない:

Public Sub MyMacro() 
    If Range("L6").Value = Range("M6).Value 
AND Range("L7").Value = Range("M7).Value 
AND Range("L8").Value = Range("M8).Value 
etc. 
    Then 
     MsgBox "Both columns match!.", vbInformation, "Match!" 
    Exit Sub 
End If 

... 

End Sub 

しかし、私はそれぞれのペアを指定することなく2列/範囲内の各行を評価することができ、より効率的なコードを探しています。

私は同様の質問に対する以下の回答を見ましたが、1つの行(この場合は#5)だけを評価します。私は、範囲内のすべての行を評価する必要があります。Fastest way to check if two ranges are equal in excel vba

Sub RowCompare() 
    Dim ary1() As Variant 
    Dim Range1 As Range, Range2 As Range, rr1 As Range, rr2 As Range 
    Set Range1 = Range("B9:F20") 
    Set Range2 = Range("I16:M27") 
    Set rr1 = Range1.Rows(5) 
    Set rr2 = Range2.Rows(5) 
    ary1 = Application.Transpose(Application.Transpose(rr1)) 
    ary2 = Application.Transpose(Application.Transpose(rr2)) 
    st1 = Join(ary1, ",") 
    st2 = Join(ary2, ",") 
    If st1 = st2 Then 
     MsgBox "the same" 
    Else 
     MsgBox "different" 
    End If 
End Sub 
+0

を。 – MacroMarc

答えて

2

この試してみてください:あなたは一度だけApplication.Transposeを使用して列を行うためにそのコードを変更することができます

Option Explicit 

Sub RowCompare() 

    Dim i As Long 
    Dim ComparisionResult As Boolean 

    For i = 6 To 29 
     If IIf(Cells(i, 12).Value = "", "", Cells(i, 12).Value) = IIf(Cells(i, 13).Value = "", "", Cells(i, 13).Value) Then 
      ComparisionResult = True 
     Else 
      ComparisionResult = False 
      Exit For 
     End If 
    Next i 

    If ComparisionResult Then MsgBox "Both columns match!", vbInformation, "Match!" Else _ 
     MsgBox "different", vbInformation, "Match!" 

End Sub 
+0

これはうまくいった!ありがとうございました。 – Larry

関連する問題