アクティブシートの空欄セルを別ファイルのシートのセルとマッチング
現在アクティブなエクセルブック内のシートから、別のエクセルファイルを開いて、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が空白である場合
- ws2の最終行まで、ループ処理を行います。各行について、以下の処理が行われます。
- 上記の2つの条件が満たされた場合、ws1の列2に、ws2の列2の値がコピーされます。この処理が終わったら、”完了”というメッセージボックスが表示されます。
コメント