Excel VBAでダイアログからパス指定しフォルダやファイルのパスを取得したいときはないでしょうか。
けど、そんな中で悩むことは、
・ダイアログからパス指定しフォルダやファイルのパスを取得するやり方がわからない。
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
もくじ
Excel VBAでダイアログからパス指定しサブフォルダを含むフォルダやファイルのパスを取得する完成イメージ
Excel VBAでダイアログからパス指定しサブフォルダを含むフォルダやファイルのパスを取得する完成イメージについて説明します。
Excel側へファイル名、フォルダ名が出力されるシートを作成し、1行目に項目を入力します。
VBAを実行し、ダイアログを表示させ、ファイル一覧を取得したいフォルダを選択しOKを押します。
空白だった箇所にファイル名、フォルダ名とそのパスが出力されます。
また、ボタンを実装し、ボタンクリックでも実行できるようにします。
ボタンを押すとダイアログが出て即取得されます!
ワンポチで即ファイル名、フォルダ名とパスが出力されるので便利ですね。
それではさっそくやってみましょう。
ファイルとフォルダを用意する
ファイルとフォルダを用意しましょう。
すでにあるフォルダとファイルを対象としてもOKです。
サブフォルダも対象としますので、2階層、3階層と作成していきましょう。
ファイル名、フォルダ名とパスが出力されるExcelシートを用意する
ファイル名、フォルダ名とパスが出力されるExcelシートを用意しましょう。
A列にファイル名、フォルダ名、B列にパスが出力されますので、
分かりやすいように1行目に項目名を入力しておきます。
サブフォルダを含むフォルダ内のファイル名を取得する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を入れています。
実行時にExcelシートの値をクリアする範囲を指定します。
範囲を変えたい場合は、”A2:B1000000″を変更してください。
VBAの実装手順
実装手順は以下の通りです。
VBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②ダイアログボックスが表示されたら対象のフォルダを選択し、「OK」を押します。
はい、指定フォルダの一階層目以降のファイル名とフォルダ名とそのパスが取得できていますね!
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】ボタンにマクロを登録する方法!引数の設定も!
さいごに
いかがでしょうか。
今回は、
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す