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

【マクロ・VBA】空欄セルを別ファイルのシートのセルとマッチング

エクセル、マクロ、VBAでアクティブシートの空欄セルを別ファイルのシートのセルとマッチングする VBA

アクティブシートの空欄セルを別ファイルのシートのセルとマッチング

現在アクティブなエクセルブック内のシートから、別のエクセルファイルを開いて、2つのファイルのシートを比較し、一致するデータを別の列に入力するものです。

以下は、各行ごとに、1つ目のファイルのA列と2つ目のファイルのA列を比較し、一致する場合は1つ目のファイルのB列に2つ目のファイルのB列の値を挿入します。また、2つ目のファイルは、マクロを実行する前にユーザーによって選択されます。

Sub 別ファイルを開いてマッチング()

'このファイル
Dim wb1 As Workbook
    Set wb1 = ThisWorkbook
Dim ws1 As Worksheet
    Set ws1 = wb1.ActiveSheet
Dim LastRow1 As Long
    LastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Dim LastCol1 As Long
    LastCol1 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column

'1つ目のインポートするファイル開く
'Dim FName As String
MsgBox "「対象ファイル」選択"
FName = Application.GetOpenFilename("Microsoft ExcelブックorCSV,*.*")  ' "\*.*")

If FName <> "False" Then
   Dim wb2 As Workbook
        Set wb2 = Workbooks.Open(FName)
   Dim ws2 As Worksheet
        Set ws2 = wb2.Worksheets(1)
   Dim LastRow2 As Long
        LastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
   Dim LastCol2 As Long
        LastCol2 = ws2.Cells(1, Columns.Count).End(xlToLeft).Column
Else
    MsgBox "File未選択 "
End
End If
    
Skip:
    
ws1.Activate

Dim i As Long
For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
    
    If ws1.Cells(i, 1) = ws2.Cells(i, 1) And ws1.Cells(i, 2) = "" Then
            ws1.Cells(i, 2) = ws2.Cells(i, 2)
    End If
        
Next
    
MsgBox "完了"
End Sub

解説

  • 変数の宣言
    • 最初に、このファイルのワークブック、ワークシート、最終行、および最終列を取得するための変数を宣言します。これらの変数には、それぞれwb1、ws1、LastRow1、およびLastCol1が割り当てられます。
  • インポートするファイルの選択
    • 次に、対象ファイルを開くためのダイアログボックスが表示されます。このダイアログボックスには、”Microsoft ExcelブックorCSV、.“というフィルターが適用され、ExcelブックまたはCSVファイルのいずれかを選択することができます。選択したファイルは、FName変数に割り当てられます。
  • ファイルの開き方の確認
    • 対象ファイルが選択された場合、そのファイルのワークブック、ワークシート、最終行、および最終列を取得するための変数を宣言します。これらの変数には、それぞれwb2、ws2、LastRow2、およびLastCol2が割り当てられます。
  • マッチング処理
    • ws2の最終行まで、ループ処理を行います。各行について、以下の処理が行われます。
      • ws1の列1の値が、ws2の列1の値と一致する場合
      • ws1の列2が空白である場合
  • 上記の2つの条件が満たされた場合、ws1の列2に、ws2の列2の値がコピーされます。この処理が終わったら、”完了”というメッセージボックスが表示されます。

コメント

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