はじめに
業務の中には「頻度は低いけどたまにやってくる単調で面倒な作業」というのが少なからずあります。
そういったものに限って忙しい時にやってきて、「あの時自動化しておけば良かった」と後悔させられるものです。
今回のマクロは前回の「ファイルを仕分ける」の逆バージョンです。
フォルダ内にある大量のファイルをExcelにリストアップする、という単純な内容です。
ファイル一覧化マクロ
pickupfile.xlsm
'-----------------------------------
'ファイル一覧化メソッド
' フォルダに格納されたファイルのファイル名を「PICKUP」シートへ記載します
' サブフォルダはチェックしません
'-----------------------------------
Sub pickupFileFunc()
Dim orgFolderPath As String
orgFolderPath = ActiveWorkbook.Path 'Excelがあるフォルダパス
sheetName = "PICKUP" 'ファイル名を記載するシート名
'エラーが発生しても無視
On Error Resume Next
'シートが無ければエラーになるが、エラーが無視されるのでwsは空となる
Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Sheets(sheetName)
'エラー無視を無効化
On Error GoTo 0
'シートが無ければ作成
If ws Is Nothing Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = sheetName
Set ws = ActiveWorkbook.Sheets(sheetName)
Else
ws.Activate
End If
'シートをクリア
ws.Cells.Clear
ws.Cells(1, "A").Value = "ファイル名"
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim cnt As Integer
cnt = 2
'ファイル名の取得
For Each fileObject In fso.GetFolder(orgFolderPath).Files
'自分は無視
If Not InStr(fileObject.Name, ActiveWorkbook.Name) <> 0 Then
ws.Cells(cnt, "A").Value = fileObject.Name
cnt = cnt + 1
End If
Next
'オブジェクト参照の解除
Set fso = Nothing
End Sub
使い方
- 上記のマクロをExcelのVBエディタにCopy&Paste。
- 「Alt+F8」キーをクリックして「moveFileFunc」マクロを実行。
- Excelと同じディレクトリ内のファイルがA列にリストアップされて完了。
簡単な解説
下記でExcelが置かれたフォルダパスを取得します。
ActiveWorkbook.Path
下記でシート名が存在するかチェックします。
On Error Resume Next
Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Sheets("シート名")
On Error GoTo 0
Set ws = ActiveWorkbook.Sheets("シート名")
でシート名を取得しますが、対象のシート名が無ければ通常はエラーになります。
そこで、事前にOn Error Resume Next
でエラーを無効化しておくことでシート名が見つからない場合にws
が空になるようにします。
あとはOn Error GoTo 0
でエラー無効化を解除しておしまいです。
下記でフォルダ内のファイルを取得して、ファイル名を一つずつセルに記入していきます。
For Each fileObject In fso.GetFolder("調査したいフォルダパス").Files
ws.Cells("行番号", "A").Value = fileObject.Name
Next
おわりに
Mac版のExcelでは動作しないので注意してください。(権限でひっかかるようです)