サイトアイコン HIBISEI Blog

Excelを開くだけで同じフォルダ内のファイル一覧を自動作成!ダブルクリックで開けるVBAコード

「このフォルダにどんなファイルが入ってたっけ?」
そんなふうに思って、フォルダを何度も開いて探した経験はありませんか?

実は、Excel VBAを使えば、エクセルを開くだけで同じフォルダ内のファイル一覧を自動作成することができます。
しかも、更新日時・ファイル種類・サイズまで一目で分かり、ダブルクリックするだけでフォルダやファイルを開ける便利仕様です。

このページでは、

・Excelを開いた瞬間に
・フォルダ内のファイル一覧を自動生成し
・そのままダブルクリックで開ける

という、実務で本当に使えるVBAコードを紹介します。

「ファイル管理をExcelで効率化したい」
「VBAで業務を自動化したい」

そんな方は、ぜひ最後まで読んでみてください。

Excelを開くだけで同じフォルダ内のファイル一覧を自動作成!ダブルクリックで開けるVBAコード

Excelを開くだけで同じフォルダ内のファイル一覧を自動作成!ダブルクリックで開けるVBAコードです。

まずは準備です。
エクセルのシートに下のように準備しておきます。

A列:フォルダ名・ファイル名
B列:更新日時
C列:ファイルの種類
D列:ファイルサイズ

1.alt」 +「F11」 を同時押し →「ThisWorkbook」をダブルクリック

2.右側にコードを入力

3.「挿入」→「標準モジュール」をクリック

4.「Module1」をダブルクリック

5.右側にコードを入力

6.「Sheet1(Sheet1)」をダブルクリック

7.右側にコードを入力

3か所にコードを入力したら、上書き保存してエクセルを一旦閉じます。

8.フォルダ内でエクセルを開く

リストを作りたいフォルダの中に、先程作ったエクセルファイルを入れて、開きます。

9.リストを自動生成 →A2列以下のセルをダブルクリック

リストが自動生成されました。

A2以下の列のセルをダブルクリックしてみます。
ここでは、A2セルをダブルクリックします。

10.ファイルが開く

「B」というファイル名のファイルが開きました!

同じように、A3セルをダブルクリックすれば、そのファイルやフォルダが開きます。

これならフォルダやファイルの検索も簡単だし、並べ替えも簡単です。

まとめ

今回は、Excelを開くだけで同じフォルダ内のファイル一覧を自動作成し、ダブルクリックで開けるVBAマクロを紹介しました。

このマクロを使えば、

・フォルダ内のファイルを一瞬で可視化
・更新日時・種類・サイズも自動取得
・エクスプローラーを開かずに目的のファイルへアクセス
・書類管理や共有フォルダ整理の手間を大幅削減

といった効果が期待できます。

一度仕込んでしまえば、あとはExcelを開くだけで自動更新されるので、日常業務のストレスがかなり減ります。

さらに、
拡張子フィルターや並び替え、検索機能などを追加すれば、
「簡易ファイル管理ツール」としても十分実用レベルになります。

このページのコードをベースに、
あなたの業務に合わせてカスタマイズしてみてはいかがでしょうか。

コードの紹介

最後に今回使ったコードの紹介です。

1.ThisWorkbook

Private Sub Workbook_Open()
    Call CreateFileList
End Sub

2.Module1

Sub CreateFileList()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1) ' 必要ならシート名指定に変更

    Dim folderPath As String
    folderPath = ThisWorkbook.Path

    If folderPath = "" Then
        MsgBox "このブックはまだ保存されていません。", vbExclamation
        Exit Sub
    End If

    ' 見出し
    ws.Range("A1").Value = "フォルダ/ファイル名"
    ws.Range("B1").Value = "更新日時"
    ws.Range("C1").Value = "種類"
    ws.Range("D1").Value = "サイズ(KB)"

    ws.Range("A2:D10000").ClearContents

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim targetFolder As Object
    Set targetFolder = fso.GetFolder(folderPath)

    Dim r As Long
    r = 2

    ' フォルダ一覧
    Dim subFolder As Object
    For Each subFolder In targetFolder.SubFolders
        ws.Cells(r, 1).Value = subFolder.Name
        ws.Cells(r, 2).Value = subFolder.DateLastModified
        ws.Cells(r, 3).Value = "フォルダ"
        ws.Cells(r, 4).Value = ""
        ws.Cells(r, 5).Value = subFolder.Path ' 開く用の実パス(非表示列)
        r = r + 1
    Next

    ' ファイル一覧
    Dim fileItem As Object
    For Each fileItem In targetFolder.Files
        ws.Cells(r, 1).Value = fileItem.Name
        ws.Cells(r, 2).Value = fileItem.DateLastModified
        ws.Cells(r, 3).Value = fso.GetExtensionName(fileItem.Name)
        ws.Cells(r, 4).Value = Round(fileItem.Size / 1024, 1)
        ws.Cells(r, 5).Value = fileItem.Path ' 開く用の実パス(非表示列)
        r = r + 1
    Next

    ws.Columns("E").Hidden = True ' パス列を隠す
    ws.Columns("A:D").AutoFit

End Sub

3.Sheet1(Sheet1)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Target.Row < 2 Or Target.Column <> 1 Then Exit Sub

    Dim fullPath As String
    fullPath = Me.Cells(Target.Row, 5).Value

    If fullPath = "" Then Exit Sub

    Cancel = True
    Shell "explorer.exe """ & fullPath & """", vbNormalFocus

End Sub
モバイルバージョンを終了