【Excel VBA】ファイル名・ファイルパスを取得する方法!拡張子無し版も!

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

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

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

ですよね。

今回はそんなお悩みを解決する

・Excel VBAでフォルダ内のファイル名やファイルパスを取得する方法
・Excel VBAでフォルダ内のファイル名やファイルパスを取得し拡張子部分を削除する方法

についてまとめます!

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

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

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

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

VBAを実行すると、黄色い背景の箇所にファイル名と、そのファイルパスが出力されます。

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

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

【Excel VBA】サブフォルダを含むファイル名・パスを取得する方法!拡張子削除も対応!

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

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

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

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

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

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

Dim intIchi As Integer
Dim strFolderpass As String
Dim objfFSO As Object
Dim objFiles As Object
Dim objFile 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を入れています。

対象フォルダのファイルパスがあるセルを指定します。上記の通りB1セルを指定します。
指定範囲の値をクリアします。これは再実行時に前の出力値を残さないようにするためにする設定です。
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
Dim objFiles As Object
Dim objFile 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 VBAでフォルダ内のファイル名やファイルパスを取得し拡張子部分を削除する方法

についてまとめました。

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



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

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





タカヒロ

ドラッカーの名言「強みを生かす」の自分の「強み」をツールでサクッと診断してみました。

結果は意外でした…

ストレングスファインダー診断結果公開!NGな点もまとめ!




2 件のコメント

    • 大変失礼いたしました。
      「変数が定義されていません」となる件につきまして、
      コード中の変数のうちDim宣言がされていないものが含まれることが原因となります。
      コードを修正いたしましたので再度確認いただきたくお願いいたします。

      またVBEのコード入力エリアに「Option Explicit」が入っているかと思いますが、
      そちらを削除すれば変数の宣言強制状態を解除することができます。

  • コメントを残す

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