選択したフォルダに含まれるExcelのファイルから,データを抽出するマクロです.
抽出した情報はマスタシートに書き出されます.
反対に,マスタシートから各ファイルへ書き込むこともできます.
目次
- ダウンロード
- 説明
- マクロ
ダウンロード
こちらからファイルをダウンロードできます.
説明
抽出する項目は,マスタシートの1行目に入っている各列の見出しに基づきます.
各ファイルでは,それぞれの見出しと対応する「セルの名前」を探し,存在すれば文字情報を抽出します.
マスタシートの1列目はファイル名を記録するのに用いられますので,2列目以降の「セルの名前1」などを適宜書き換えてご使用ください.
使用される見出しの範囲は,右へ進み空白にあたるまでです.
書き込みは抽出の逆操作で,各ファイルに書き込みます.
マクロ
ダウンロードされるファイルのマクロは以下のようになっています.
Sub Macro1() Call Extractor(True) End Sub
Sub Macro2() Call Extractor(False) End Sub
Private Sub Extractor(ByVal extraction_mode As Boolean) Dim ws_mst_name As String ws_mst_name = ThisWorkbook.ActiveSheet.Range("ws_mst_name") Dim ws_template_name As String ws_template_name = ThisWorkbook.ActiveSheet.Range("ws_template_name")
Dim ws_mst As Worksheet Set ws_mst = ThisWorkbook.Worksheets(ws_mst_name)
Dim sep As String Dim filePath As String Dim fileName As String If Application.OperatingSystem Like "*Mac*" Then sep = "/" Else sep = "¥" End If Application.ScreenUpdating = False
Dim dir_name As String dir_name = ChooseDir() filePath = dir_name & sep & "*.xls*" fileName = "" fileName = Dir(filePath) Dim i As Long i = 1 ws_mst.Cells(i, 1) = "ファイル名" i = 2 Do While fileName <> "" If fileName = ThisWorkbook.Name Then GoTo ContinueLabel End If If Not extraction_mode Then Do While ws_mst.Cells(i, 1) <> "" If fileName = ws_mst.Cells(i, 1) Then GoTo BreakLabel End If i = i + 1 Loop GoTo ContinueLabel End If BreakLabel: filePath = dir_name & sep & fileName Workbooks.Open filePath Set wb = ActiveWorkbook Set ws = wb.Worksheets(ws_template_name) If extraction_mode Then ws_mst.Cells(i, 1) = wb.Name End If j = 2 Do While ws_mst.Cells(1, j) <> "" mst_col_name = ws_mst.Cells(1, j) n_flg = False For Each n In wb.Names If n.Name = mst_col_name Then n_flg = True Next If n_flg And extraction_mode Then ws_mst.Cells(i, j) = ws.Range(mst_col_name) ElseIf n_flg And Not extraction_mode Then ws.Range(mst_col_name) = ws_mst.Cells(i, j) End If j = j + 1 Loop ws_mst.Activate If extraction_mode Then wb.Close SaveChanges:=False i = i + 1 Else wb.Close SaveChanges:=True i = 2 End If ContinueLabel: fileName = Dir() Loop Application.ScreenUpdating = True MsgBox "マクロを実行しました." End Sub
Function ChooseDir() Dim cancel_msg As String cancel_msg = "キャンセルしました." Dim dirPath As String If Application.OperatingSystem Like "*Mac*" Then dirPath = MacScript("try" & vbCrLf & "return posix path of (choose folder with prompt ""ディレクトリを選択してください."") as string" & vbCrLf & "end try") If dirPath = "" Then MsgBox cancel_msg End End If Else With Application.FileDialog(msoFileDialogFolderPicker) If .Show = 0 Then MsgBox cancel_msg End End If dirPath = .SelectedItems(1) & "¥" End With End If ChooseDir = dirPath End Function
|