【ExcelVBA】列と行の位置が異なる2つの表の値を比較する方法

ExcelVBA

列と行の位置が異なる2つの表を比較する方法をご紹介します。

たとえば以下の画像のように、「価格」という列の位置がC列とD列で異なっており、商品コードの位置も7行目と5行目でことなっています。この場合はExcelVBAでループ処理することで解決ができます。

値を比較するコード

Sub test()
    
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    
    ' 比較するシートを変数に格納
    Set sh1 = ThisWorkbook.Worksheets("比較1")
    Set sh2 = ThisWorkbook.Worksheets("比較2")
    
    ' 背景色を初期化
    sh1.Cells.Interior.Color = xlNone
    sh2.Cells.Interior.Color = xlNone


    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim l As Long
    
    ' 比較1シートの列数
    For j = 1 To 4
        ' 比較2シートの列数
        For k = 1 To 6

            ' ヘッダーの比較
            If sh1.Cells(1, j) = sh2.Cells(1, k) Then

                ' 比較1シートの行数
                For i = 2 To 10
                    ' 比較2シートの行数
                    For l = 2 To 10

                        ' キー項目の比較
                        If sh1.Cells(i, 1) = sh2.Cells(l, 1) Then

                            ' 値を比較する
                            If sh1.Cells(i, j) <> sh2.Cells(l, k) Then

                                ' 値が異なる場合、色を変更する
                                sh1.Cells(i, j).Interior.Color = RGB(255, 0, 0)
                                sh2.Cells(l, k).Interior.Color = RGB(255, 0, 0)

                            End If

                            GoTo row_continue
                        End If
                    Next
row_continue:
                Next
            End If
        Next
    Next

End Sub

実行結果

列方向と縦方向の位置が同じでなくても比較することができました!

ぜひご活用ください。

ではまた。

コメント