【Excel VBA】フォルダ内のファイル名を取得する方法!拡張子無し版も!

Excel VBAでフォルダ内のファイル名を取得したいときはないでしょうか。

けど、そんな中で悩むことは、

・Excel VBAでフォルダ内のファイル名を取得するやり方がわからない。
・拡張子を取り除くなど出力したファイル名を加工したいがやり方がわからない。

ですよね。

今回はそんなお悩みを解決する
Excel VBAでフォルダ内のファイル名を取得する方法とオプションで拡張子なし版の方法について
まとめます!

Excel VBAでフォルダ内のファイル名を取得する完成イメージ

Excel VBAでフォルダ内のファイル名を取得する完成イメージについて説明します。

まず、ファイル一覧を取得したいフォルダへアクセスし、パス情報を取得します。

エクセルにシートを追加し、B1セルへそのパスを貼り付けます。

VBAを実行すると、黄色い背景の箇所にファイル名と、そのパスであるディレクトリ情報が出力されます。

このような形になります。

タカヒロ
タカヒロ
今回は指定パスの一階層目のみが対象となります。2階層目以降のサブフォルダを含ませたい場合は以下をご参照ください。

さらに拡張子を除く処理を加え、ファイルの拡張子を除いたファイル名一覧を出力していきます。

それではさっそくやってみましょう。

フォルダ内のファイル名を取得するVBA

フォルダ内のファイル名を取得するVBAを実装していきましょう。

以下サンプルコードです。

Sub フォルダ内のファイル名を取得()

Dim intIchi As Integer
Dim strFolderpass As String
Dim objfFSO As Object


'ファイル名一覧を出力する行番号を指定します。
intIchi = 3

'対象フォルダのパスがあるセルを指定し、値を代入します。
strFolderpass = Range("B1").Value

'指定範囲の値をクリアします。
Range("A3:B10000").Clear


'対象フォルダのパスの値があれば処理をおこないます。
If strFolderpass = "" Then
    MsgBox "対象フォルダのパスがありません。パスを入力してください。"
Else

    'FileSystemObjectはファイルやフォルダを操作する専用のオブジェクトです。インスタンスにセットします。
    Set objfFSO = CreateObject("Scripting.FileSystemObject")

    '対象フォルダのファイルオブジェクトをセットします。
    Set objFiles = objfFSO.GetFolder(strFolderpass).Files
    
    'ファイル情報を出力します。
    For Each objFile In objFiles
        Cells(intIchi, 1) = objFile.Name        
        Cells(intIchi, 2) = objFile.Path
        intIchi = intIchi + 1
    Next objFile

End If

Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing

End Sub

VBAの設定

以下の設定をおこないます。

ファイル名一覧を出力する行番号を指定します。サンプルではA3から出力していますので3行目の3を入れています。

intIchi = 3


対象フォルダのパスがあるセルを指定します。上記の通りB1セルを指定します。

strFolderpass = Range(“B1”).Value

指定範囲の値をクリアします。これは再実行時に前の出力値を残さないようにするためにする設定です。
1万行以上ある場合は数値の部分を変更してください。

Range(“A3:B10000”).Clear

では実行してみましょう。

はい、指定フォルダの一階層目のファイル名が取得できていますね。

VBAの説明

ファイル名を取得しているのはFileSystemObjectで、
ファイルやフォルダを操作したり、情報を取得するオブジェクトとなり、
このFileSystemObjectオブジェクトをインスタンスにセットします。

Set objfFSO = CreateObject(“Scripting.FileSystemObject”)

タカヒロ
タカヒロ
この箇所でエラーとなった場合は、VBEを開き、ツール>参照設定へアクセスし、
「Microsoft Scripting Runtime」にチェックを入れてください。

Filesプロパティ対象フォルダのファイルオブジェクトをセットします。

Set objFiles = objfFSO.GetFolder(strFolderpass).Files

ファイルオブジェクトから一件づつファイル情報を出力します。
Nameプロパティでファイル名をPathプロパティでディレクトリ情報を取得し、セルへ代入しています。

For Each objFile In objFiles
Cells(intIchi, 1) = objFile.Name
Cells(intIchi, 2) = objFile.Path
intIchi = intIchi + 1
Next objFile

フォルダ内のファイル名を取得し拡張子部分を削除するVBA

次に取得したファイル名一覧からドット「.」以下の拡張子を取り除いていきましょう。

以下サンプルコードです。

Sub フォルダ内のファイル名を取得()

Dim intIchi As Integer
Dim strFolderpass As String
Dim objfFSO As Object


'ファイル名一覧を出力する行番号を指定します。
intIchi = 3

'対象フォルダのパスがあるセルを指定し、値を代入します。
strFolderpass = Range("B1").Value

'指定範囲の値をクリアします。
Range("A3:B10000").Clear


'対象フォルダのパスの値があれば処理をおこないます。
If strFolderpass = "" Then
    MsgBox "対象フォルダのパスがありません。パスを入力してください。"
Else

    'FileSystemObjectはファイルやフォルダを操作する専用のオブジェクトです。インスタンスにセットします。
    Set objfFSO = CreateObject("Scripting.FileSystemObject")

    '対象フォルダのファイルオブジェクトをセットします。
    Set objFiles = objfFSO.GetFolder(strFolderpass).Files
    
    'ファイル情報を出力します。
    For Each objFile In objFiles
        Cells(intIchi, 1) = objFile.Name
        
        '拡張子を削除したファイル名を出力します。
        If InStrRev(objFile.Name, ".") Then
            'InStrRevで右から"."の位置を取得し、それ以降の文字列を抽出します。
            Cells(intIchi, 1) = Left(objFile.Name, InStrRev(objFile.Name, ".") - 1)
        End If
        
        Cells(intIchi, 2) = objFile.Path
        intIchi = intIchi + 1
    Next objFile

End If

Set objfFSO = Nothing
Set objFiles = Nothing
Set objFile = Nothing

End Sub

VBAの説明

設定内容は先ほどのVBAと同じで、拡張子を取り除く処理だけを追加しています。

拡張子を削除したファイル名を出力します。
InStrRev関数で右から指定ワードに合致した位置を取得し、Left関数でそれ以降の文字を抽出していきます。

‘If InStrRev(objFile.Name, “.”) Then
‘Cells(intIchi, 1) = Left(objFile.Name, InStrRev(objFile.Name, “.”) – 1)
‘End If

タカヒロ
タカヒロ
Inster関数だと左から指定ワードを探しに行きますので、例えば「test1.2021.8.xls」だと「test1.2021.8」とはならずに「test1」となってしまいます。
拡張子など右の文字から判定する場合は、InStrRev関数を追加しましょう。


では実行してみましょう。

はい、指定フォルダの一階層目のファイル名が拡張子を取り除いた形で取得されていますね。

VBAの実装手順

実装手順は以下の通りです。

今回はExcel側にこのVBAを実装します。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。

さいごに

いかがでしょうか。

今回は、
Excel VBAでフォルダ内のファイル名を取得する方法とオプションで拡張子なし版の方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

 
タカヒロ  
Excelの基礎がスルスル入ってくるAmazonランク1位の優良Excel本です。
 
この基礎本と応用技が多いエク短と組み合わせれば、短時間で誰よりもExcelが使いこなせるかと思います。
 
2022/1/21(金)23: 59までAmazon限定の「厳選ショートカットキー」DL特典アリです。 >詳細を見てみる 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です