【Excel VBA】ダイアログからフォルダやファイルのパスを取得する方法!サブフォルダも取得可!

Excel VBAでダイアログからパス指定しフォルダやファイルのパスを取得したいときはないでしょうか。

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

・Excel VBAでダイアログからフォルダパスを取得するやり方がわからない。
・ダイアログからパス指定しフォルダやファイルのパスを取得するやり方がわからない。

ですよね。

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

・Excel VBAでダイアログからパス指定しフォルダやファイルのパスを取得する方法

についてまとめます!

Excel VBAでダイアログからパス指定しサブフォルダを含むフォルダやファイルのパスを取得する完成イメージ

Excel VBAでダイアログからパス指定しサブフォルダを含むフォルダやファイルのパスを取得する完成イメージについて説明します。

Excel側へファイル名、フォルダ名が出力されるシートを作成し、1行目に項目を入力します。

VBAを実行し、ダイアログを表示させ、ファイル一覧を取得したいフォルダを選択しOKを押します。

空白だった箇所にファイル名、フォルダ名とそのパスが出力されます。

また、ボタンを実装し、ボタンクリックでも実行できるようにします。

ボタンを押すとダイアログが出て即取得されます!

ワンポチで即ファイル名、フォルダ名とパスが出力されるので便利ですね。

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

ファイルとフォルダを用意する

ファイルとフォルダを用意しましょう。
すでにあるフォルダとファイルを対象としてもOKです。

サブフォルダも対象としますので、2階層、3階層と作成していきましょう。

タカヒロ
タカヒロ
なお、対象となるファイル数が多い場合は処理に時間がかかるか、メモリがオーバーフローする場合がありますので、はじめは数ファイル程度と少ない件数で検証することをオススメします。

ファイル名、フォルダ名とパスが出力されるExcelシートを用意する

ファイル名、フォルダ名とパスが出力されるExcelシートを用意しましょう。
A列にファイル名、フォルダ名、B列にパスが出力されますので、
分かりやすいように1行目に項目名を入力しておきます。

タカヒロ
タカヒロ
VBAを実行する際はこのシートを表に出すようにしてください。

サブフォルダを含むフォルダ内のファイル名を取得するVBA

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

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

Sub ダイアログからサブフォルダ含むファイル名とパスを取得()

    Dim intIchi As Integer
    Dim strFolderpass As String
    Dim objFileDialog As Object
    
    'ファイル名一覧を出力する行番号を指定します。
    intIchi = 2
    
    '指定範囲の値をクリアします。
    Range("A2:B1000000").Clear
    
    'ファイルダイアログオブジェクトをフォルダ選択モードでオブジェクトに設定します。
    Set objFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
    
    'ダイアログボックスを表示させます。
    If objFileDialog.Show = True Then
        
        'ダイアログで選択したフォルダのパスをSelectedItemsプロパティ(1番目のインデックス値)から取得し代入します。
        strFolderpass = objFileDialog.SelectedItems(1)
        
        'ファイル名取得プロシージャを呼び出します。
        Call ファイル名取得プロシージャ(strFolderpass, intIchi)
    
    Else
        '「キャンセル」ボタンが押された場合メッセージを表示させます。
        MsgBox "フォルダの選択をキャンセルしました。"
    End If
    
    Set objFileDialog = Nothing

End Sub



Sub ファイル名取得プロシージャ(strFolderpass As String, intIchi As Integer)

    Dim objfFSO As Object
    Dim objFiles As Object
    Dim objFile As Object
    Dim objSubFolders As Object
    Dim objSubFolder As Object
    
    
    '対象フォルダのパスの値があれば処理をおこないます。
    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
        
        '対象フォルダのサブフォルダファイルオブジェクトをセットします。
        Set objSubFolders = objfFSO.GetFolder(strFolderpass).SubFolders
    
        'サブフォルダを含むファイル名取得の処理をおこないます。
        For Each objSubFolder In objSubFolders
         
            If objSubFolder.Name <> "" Then
                Cells(intIchi, 1) = objSubFolder.Name
                Cells(intIchi, 2) = objSubFolder.Path
                intIchi = intIchi + 1
                
                'サブフォルダのパスを本プロシージャへ渡して再帰的に処理を繰り返します。
                Call ファイル名取得プロシージャ(objSubFolder.Path, intIchi)
                
            End If
             
        Next objSubFolder
    
    End If
    
    Set objfFSO = Nothing
    Set objFiles = Nothing
    Set objFile = Nothing
    Set objSubFolders = Nothing
    Set objSubFolder = Nothing

End Sub

VBAの設定

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

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

intIchi = 2

実行時にExcelシートの値をクリアする範囲を指定します。
範囲を変えたい場合は、”A2:B1000000″を変更してください。

Range(“A2:B1000000”).Clear

VBAの実装手順

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

VBAを実装します。

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

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

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

こちらで完了です。

VBAを実行する

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

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

②ダイアログボックスが表示されたら対象のフォルダを選択し、「OK」を押します。

はい、指定フォルダの一階層目以降のファイル名とフォルダ名とそのパスが取得できていますね!

VBAの説明

ファイル名取得プロシージャの内容については前回の記事、

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


をご参照ください。

ファイルダイアログオブジェクトをフォルダ選択モードでオブジェクトに設定します。

Set objFileDialog = Application.FileDialog(msoFileDialogFolderPicker)

ファイルダイアログタイプに使用する定数は以下の通りです。

msoFileDialogFilePicker ファイル選択モード
msoFileDialogFolderPicker フォルダ選択モード

ダイアログボックスを表示させます。OKが押された場合はTrueが返りますのでそれで次の処理に行くかを判定しています。

If objFileDialog.Show = True Then

ダイアログで選択したフォルダのパスをSelectedItemsプロパティ(1番目のインデックス値)から取得し代入します。

strFolderpass = objFileDialog.SelectedItems(1)

ファイル名取得プロシージャを呼び出します。

Call ファイル名取得プロシージャ(strFolderpass, intIchi)

「キャンセル」ボタンが押された場合メッセージを表示させます。

MsgBox "フォルダの選択をキャンセルしました。"

ボタンからVBAを実行する

次にボタンを配置し、ボタンをクリックしたらVBAを実行できるようにしましょう。

ボタンをワークシートへ配置していきます。

開発タブの挿入アイコンをクリックし、フォームコントロールの「ボタン」を選択します。

ボタンが挿入されたらボタンの中の表示名を適当な内容に変更します。

続いて、ボタンを右クリックし、マクロの登録を選択します。
上記VBAを選択し、「OK」を押下します。

ボタンを押して実行してみましょう。

はい、前回と同様に指定フォルダの一階層目以降のファイル名とフォルダ名とそのパスが取得できていますね!

タカヒロ
タカヒロ
ボタン配置および設定の詳細を知りたい方は以下のページもご参照ください。


【Excel VBA】ボタンにマクロを登録する方法!引数の設定も!

さいごに

いかがでしょうか。

今回は、

・Excel VBAでダイアログからパス指定しフォルダやファイルのパスを取得する方法

についてまとめました。

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



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

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








コメントを残す

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