シート間のデータをマッチングして無いデータを追加
このVBAコードは、基となるアクティブシートと、その右隣のシートとを比較し、基となるシートに存在しないデータがあれば、そのデータを基となるシートに追加します。
Sub シート間マッチング()
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
.Calculation = xlCalculationManual
End With
'基_アクティブシート
Dim wb1 As Workbook
Set wb1 = ThisWorkbook
Dim ws1 As Worksheet
Set ws1 = wb1.ActiveSheet
Dim LastCol1 As Long
LastCol1 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column
'相手_アクティブシートの右のシート
Dim wb2 As Workbook
Set wb2 = ThisWorkbook
Dim ws2 As Worksheet
Set ws2 = wb2.ActiveSheet.Next
Dim LastCol2 As Long
LastCol2 = ws2.Cells(2, Columns.Count).End(xlToLeft).Column
Dim LastRow1 As Long
LastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Dim LastRow2 As Long
LastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long
Z = LastRow1 + 1 'B列の追加する行を指定します。
For i = 2 To LastRow2
Set A = ws1.Columns("A").Find(What:=ws2.Cells(i, "A"), LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
'B列とF列を比較する。
If A Is Nothing Then
ws1.Cells(Z, "A") = ws2.Cells(i, "A")
ws1.Cells(Z, "B") = ws2.Cells(i, "B")
ws1.Range("A" & Z).Interior.ColorIndex = 6 )
Z = Z + 1 '追加する件数毎に+1加算
End If
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
End With
MsgBox "完了"
End Sub
解説
- 1行目: マクロ名 “シート間マッチング” が定義されています。
- 3-7行目: Excelの設定を変更し、画面の更新を止め、イベント処理や警告表示を無効化し、計算モードを手動に切り替えます。これにより、マクロの実行速度が上がります。
- 10-13行目: 変数 wb1、ws1、LastCol1 を宣言し、アクティブなシートの情報を格納しています。ここでは、アクティブなシートの一番右にある列の列番号を LastCol1 に格納しています。
- 16-19行目: 変数 wb2、ws2、LastCol2 を宣言し、アクティブなシートの右隣のシートの情報を格納しています。同様に、アクティブなシートの一番右にある列の列番号を LastCol2 に格納しています。
- 22-25行目: 変数 LastRow1、LastRow2 を宣言し、各シートの最終行を格納しています。
- 27行目: 変数 Z を宣言し、アクティブなシートにデータを追加するための行番号を設定します。
- 29-44行目: ループ処理によって、アクティブなシートのデータと、右のシートのデータを比較します。A列を検索して、アクティブなシートに存在しない場合、その行のA列とB列のデータをアクティブなシートにコピーします。そして、A列の背景色を黄色に変更します。
- 46-50行目: Excelの設定を元に戻します。それぞれ、画面の更新を再開し、イベント処理や警告表示を有効にし、計算モードを自動に戻します。
- 52行目: マクロが完了した旨を表示するメッセージボックスが表示されます。
コメント