Excel VBA(マクロ)で表を比較し、一致・重複しないデータだけを列の最後に追加する方法

mushrooms IT

表Aに「ない」データだけを表Bから追加するマクロの作り方です。コピペで動きます。

スポンサーリンク

成果物

Sheet1のA列にデータがあり、
Sheet2のA列に追加したいデータがある状態でマクロを実行すると、
Sheet2からSheet1へ、Sheet1にないデータだけが追加されます。
この場合「c」はSheet1に既にあるので追加されず、「d」「e」だけが下に追加されます。

このまま使う場合はSheet1、Sheet2のシート名は変えず、各A列に関係ないデータがない状態でご利用ください。

' vba
Sub macro1()

    Dim i As Integer
    'Sheet1
    Dim sht1 As Range
    'SHeet2
    Dim sht2 As Range
    Dim cnt As Integer

    'Sheet2のセル数
    cnt = WorksheetFunction.CountIf(Sheets("Sheet2").Range("A:A"), "")
    For i = 1 To cnt
        'Sheet2のi行目の文字をSheet1で検索
        Set sht2 = Sheets("Sheet2").Cells(i, 1)
        Set sht1 = Sheets("Sheet1").Range("A:A").Find(sht2.Value)
        '同じ文字が見付からない場合
        If sht1 Is Nothing Then
            'Sheet1のA列一番下へ移動、追加
            Sheets("Sheet1").Range("A1").End(xlDown).Offset(1, 0).Select
            Selection.Value = sht2.Value
        End If
    Next

End Sub

以下、ざっくりですが解説です。

列の一番下を選択

この場合、Sheets("Sheet1").Range("A1").End(xlDown).Selectを実行すれば、Sheet1のA列一番下のセルが選択されます。
Sheets("Sheet1").Range("A1").End(xlDown).Offset(1, 0).Selectとしてやれば、A列でデータがある最後のセルのひとつ下、データを追加するためのセルが取得できます。

追加判定するデータの数

' vba
'Sheet2のセル数
cnt = WorksheetFunction.CountIf(Sheets("Sheet2").Range("A:A"), "")
空白ではない(データのある)セルの数を検索する場合は、条件を""とすればOKです。

一致するデータを検索

' vba
'Sheet2のi行目の文字をSheet1で検索
Set sht2 = Sheets("Sheet2").Cells(i, 1)
Set sht1 = Sheets("Sheet1").Range("A:A").Find(sht2.Value)
For Nextの繰り返し回数iを行数に使い、Sheet2のA列のセルを上から順にひとつずつ取得します。
それから、取得したセルと同じ内容のセルがSheet1のA列にあるかを、Findメソッドを使って確認します。
' vba
'同じ文字が見付からない場合
If sht1 Is Nothing Then
'Sheet1のA列一番下へ移動
Sheets("Sheet1").Range("A1").End(xlDown).Offset(1, 0).Select
Selection.Value = sht2.Value
End If
あとは、一致するものが見つからなかった時だけ、Sht2のデータを一番下に追加してやれば目的が達成できます。
Excel(エクセル):行、列
Excelの行、列関係操作、関数、VBAです。他のまとめとかぶる部分が多い場合はリンク貼ります。 行・列の選択 行・列の選択方法です。 テーブル内の行・列一括選択方法です。 VBA(マクロ)で列・...
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ

コメント

モバイルバージョンを終了