例文を使って繰り返し業務を時短

【マクロ・VBA】シート間のデータをマッチングして基データのシートに無いデータを追加して色をつける

エクセル、マクロ、VBAでシート間のデータをマッチングして無いデータを基データに転記して色をつける方法 VBA

シート間のデータをマッチングして無いデータを追加

この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行目: マクロが完了した旨を表示するメッセージボックスが表示されます。

コメント

タイトルとURLをコピーしました