共有フォルダやプロジェクト用のフォルダに、どんなファイルが入っているかリスト化して管理したいことはありませんか? 手書きやコピペでリストを作るのは時間がかかりますし、ファイルが増えるたびに更新するのは面倒です。
このマクロを使えば、ボタン一発で最新のファイル一覧を作成し、クリックするだけでファイルを開ける状態に整えることができます。
今回紹介するコードの動作イメージ
- 処理を実行すると、フォルダを選択する画面が開きます。
- 選択したフォルダ内にある全てのファイル名、最終更新日時、ファイルサイズをシートに書き出します。
- ファイル名にそのファイルへのハイパーリンクを設定します。
それでは、実用的なコードを見ていきましょう。
ファイル一覧を自動作成するVBAコード
このコードは、マクロを実行したシートのA列から順に情報を出力します。
VBA
Sub CreateFileListWithLinks()
Dim FSO As Object
Dim targetFolder As Object
Dim targetFile As Object
Dim folderPath As String
Dim i As Long
' 1. フォルダ選択ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
folderPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
' 2. FileSystemObjectの作成
Set FSO = CreateObject("Scripting.FileSystemObject")
Set targetFolder = FSO.GetFolder(folderPath)
' 3. シートの準備(見出しの作成)
Cells.Clear
Range("A1:D1").Value = Array("ファイル名", "リンク", "最終更新日時", "サイズ(KB)")
Rows(1).Font.Bold = True
' 4. ファイル情報を取得して書き出し
i = 2
For Each targetFile In targetFolder.Files
' ファイル名をA列に
Cells(i, 1).Value = targetFile.Name
' B列にハイパーリンクを設定
ActiveSheet.Hyperlinks.Add _
Anchor:=Cells(i, 2), _
Address:=targetFile.Path, _
TextToDisplay:="開く"
' 最終更新日時とサイズをC, D列に
Cells(i, 3).Value = targetFile.DateLastModified
Cells(i, 4).Value = Application.RoundUp(targetFile.Size / 1024, 0)
i = i + 1
Next targetFile
' 5. 見栄えの調整
Columns("A:D").AutoFit
MsgBox "ファイル一覧の作成が完了しました!", vbInformation
End Sub
コードのポイント解説
1. FileSystemObject(FSO)の利用
CreateObject(“Scripting.FileSystemObject”) を使うことで、Windows上のファイルやフォルダを自在に操れるようになります。ファイルサイズや更新日時といった詳細な情報を取得するのに非常に便利なツールです。
2. Hyperlinks.Add メソッド
ここが今回の肝です。Addressにファイルのフルパス(targetFile.Path)を指定することで、Excel上からワンクリックで対象のファイルを開けるようになります。
3. ファイルサイズの計算
targetFile.Size は「バイト」単位で取得されます。そのままでは数字が大きすぎて読みにくいため、1024で割って「KB(キロバイト)」単位に変換し、切り上げ処理をしています。
4. 画面をクリアして再作成
Cells.Clear を最初に入れることで、前回の実行結果が残らないようにしています。常に最新のフォルダ状態を反映したリストが手に入ります。
このマクロの使い方
- 新しいExcelシートを用意します。
- Alt + F11 を押してVBEを開き、標準モジュールにコードを貼り付けます。
- マクロを実行します。
- 一覧を作りたいフォルダを選択して「OK」を押します。
- 一瞬でファイルリストが生成されます。
カスタマイズのヒント
特定の拡張子だけをリストアップしたい場合
For Each の中で If FSO.GetExtensionName(targetFile.Name) = “pdf” Then … End If のように条件を加えれば、PDFファイルだけのリストを作ることも可能です。
サブフォルダの中身も取得したい場合
今回のコードは指定したフォルダの直下にあるファイルのみを対象としています。サブフォルダも含める場合は「再帰処理」という手法を使いますが、まずはこのシンプルな形から試すのがおすすめです。
まとめ
「あのファイル、どこに置いたっけ?」と探す時間は、積み重なると大きなロスになります。 このマクロでインデックス(索引)を作っておけば、管理が劇的に楽になりますよ。


コメント