- ベストアンサー
ExcelVBAでデータ不一致のものの抽出方法
- ExcelVBAを使用して、最新データと元データの番号を比較し、一致しないデータや元データにしかないデータ、最新データにしかないデータを抽出する方法について説明します。
- 最新データのA列の番号と元データの番号を比較し、一致しないデータを見つけるために、VBAのFind関数を使用します。
- 一致しないデータが見つかった場合は、元データからそのデータの内容を取得し、新規データシートに行ごとに書き込みます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「このモジュールに追加するかたちで」という条件がある解釈しました。最新データは全行見るが元データは全行見ていないことより 1.新規データに一旦、元データをすべてコピーする。 2.最新データと元データを比較して、 (a)最新データが元データにあった場合は新規データから削除 (b)最新データが元データになかった場合は最新データを新規データに追加する という方法が思いつきました。 以下、サンプルコーディング。 Set Sh1 = Worksheets("元データ") Set Sh2 = Worksheets("新規データ") Set Sh3 = Worksheets("最新データ") '↓追加******************************************************************* '元データを新規データにコピー With Sh1 .Select Cells.Select Selection.Copy .Range("A1").Select End With With Sh2 .Select .Range("A1").Select ActiveSheet.Paste .Range("A1").Select End With '↑*********************************************************************** With Sh3 For i = 5 To .Range("A65536").End(xlUp).Row ' N_D = .Range("E" & i).Value ← 修正 N_D = .Range("A" & i).Value Set myR = Sh1.Range("A:A").Find(What:=N_D, LookIn:=xlValues, _ MatchCase:=False) If Not myR Is Nothing Then ' myR.Offset(, 2).Resize(, 3).Copy ← 修正 myR.Offset(, 1).Resize(, 3).Copy _ Destination:=.Range("B" & i & ":D" & i) '↓追加******************************************************************* ' 新規データから最新データにもあるデータを削除 Set myR = Sh2.Range("A:A").Find(What:=N_D, LookIn:=xlValues, _ MatchCase:=False) newR = myR.Row Sh2.Rows(newR).Delete Else ' 新規データに元データに無い最新データを追加 addR_No = Sh2.Range("A65536").End(xlUp).Row + 1 .Range("A" & i & ":D" & i).Copy _ Destination:=Sh2.Range("A" & addR_No & ":D" & addR_No) '↑*********************************************************************** End If Next End With Set Sh1 = Nothing Set Sh2 = Nothing Set Sh3 = Nothing
お礼
ご回答ありがとうございます。 頭がうまく働かなくて混乱中です。 作り上げるのに時間がかかりそうなのですが、とても参考になりました。 ありがとうございました。