【3月6日実施】システムメンテナンス実施のお知らせ

Excelマクロにて、シートの差分抽出に関する質問です。
色々ネットで調べて作成してみたのですが、初心者のため上手くいかず、ご質問させていただきました。 シート1に新データ、シート2に前回データを貼り付けてシート3に差分データを抽出したいです。

実際のデータ例

※1.2行目はヘッダー。
新データ(シート1)
//A000031/20220423/北海道店//鈴木例男...←追加(抽出)
//D000250/20220613/大阪店/太田例時...←名前変更(抽出無)
//F000191/20230122/広島店/佐藤例人...←追加(抽出)
//F000191/20230202/広島店/村上例名...←追加、管理番号重複(抽出)
//A000943/20221215/福岡店/田中例実...←更新無(抽出無)
//A000111/20230607/北海道店/鈴木例男...←追加(抽出)

旧データ(シート2)
//A000073/20230303/東京店/山本例奈...
//D000250/20220613/大阪店/加藤例子...
//A000943/20221215/福岡店/田中例実...
//A000073/20221115/沖縄店/山田例信...

差分データ(シート3)
//A000031/20220423/北海道店/鈴木例男
//F000191/20230122/広島店/佐藤例人
//F000191/20230202/広島店/村上例名
//A000111/20230607/北海道店/鈴木例男
...

となっており、A列だけに入力されてます。
上記の通り、重複している管理番号もあり、すべて抽出したい。

※3つ、4つ重複するデータもあります。

行ではなく、商品番号を軸にして比較し、新データで新しく追加された商品番号がある行をシート3に抽出。(一致した商品番号行は省いてシート3に抽出)

すみません、ワガママを言うとシート3に抽出したデータをcsvファイルで書き出しするコードも教えていただけると幸いです。

上記のことが出来るコードを教えていただけないでしょうか。
宜しくお願いいたします。

A 回答 (2件)

Sub GetDiff()


Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim lastRow1 As Long, lastRow2 As Long, i As Long, j As Long
Dim match As Boolean

Set ws1 = Sheets("シート1")
Set ws2 = Sheets("シート2")
Set ws3 = Sheets("シート3")

lastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
lastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow1 ' i=2は、ヘッダー行を除くため
match = False
For j = 2 To lastRow2
If ws1.Cells(i, 1).Value = ws2.Cells(j, 1).Value Then
match = True
Exit For
End If
Next j
If Not match Then
ws3.Cells(ws3.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = ws1.Cells(i, 1).Value
End If
Next i

End Sub
    • good
    • 0

シート1とシート2のA列にある値の差分を取得して、シート3に出力するマクロの例です。

このマクロでは、シート1とシート2のA列にある値を比較して、シート1にあってシート2にない値をシート3に出力しています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!