フォルダを選んで、そのファイルに何らかの編集やマクロの適用などをしたいときに使うファイルダイアログについて解説します。
ダイアログを開く方法に加えて各種オプションの設定方法なども紹介していきます。
目次
ソースコード
引数に行と列を指定することで特定のセルにダイアログで選択したフォルダのアドレスを出力します。
既にセルにアドレスがある場合は、そのフォルダを選択した状態でダイアログが開きます。ネットワークドライブでも有効なのでいちいちマイドキュメント等に戻される手間を回避できます。
※ボタンに登録するときには、’SelectFolder 2,2’のように指定します。
Option Explicit Sub SelectFolder(ByVal wRow As Integer, ByVal wCol As Integer) Dim OpenFile As String Dim FSO As New Scripting.FileSystemObject ThisWorkbook.ActiveSheet.Cells(wRow, wCol).Select OpenFile = ActiveCell.Value With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False If FSO.FolderExists(OpenFile) = True Then .InitialFileName = OpenFile & Chr(13) End If If .Show = True Then ActiveCell.Value = .SelectedItems(1) End If End With End Sub
各種オプション
単一ファイル選択または複数ファイル選択
通常はFalseにして単一ファイルを選択とします。
With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False End With
初期選択フォルダを設定(前回のファイルを参照)
InitialFileNameにフルパスを指定することで、フォルダを選択した状態でダイアログを開くことができます。
さらにそのファイルのあるフォルダまで遷移した状態になります。
フルパス(前回の情報)をどこかに保存しておく必要がありますが、再選択にかかる時間を削減できるとても便利な機能です。
※ファイルが削除・移動などされている可能性を考慮し、FilesystemobjectのFolderExistsでファイルの存在を再確認しましょう。
With Application.FileDialog(msoFileDialogFolderPicker) If FSO.FolderExists(OpenFile) = True Then .InitialFileName = OpenFile & Chr(13) End If End With
ですがこのオプション、実はフォルダ用には向きません。というのも普通にフォルダパス指定すると最下層フォルダをファイルとして誤判定してしまいます。
なので使用する際は止むを得ずですが、Chr(13)を入れることでそれを回避できます。
デメリットとしてフォルダを再選択する際は、表示されたダイアログをそのままOKすることはできずエラーになります。ですがフォルダの遷移自体は有効ですのでそのまま前回フォルダを再選択すればエラーとはなりません。
よりスマートな方法があればよいですが今のところ用意されていないようです。
選択したフォルダを取得する
ダイアログで選択したフォルダをセルへ出力するには以下のようにします。
Showでダイアログの表示を確認し、SelectedItemsから選択したファイル情報を取得します。
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then ActiveCell.Value = .SelectedItems(1) End If End With
参照設定
使用の際には以下参照設定が必要となります。CreateObjectでも代用可能です。
(開発タブ>Visual Basic>ツール(T)>参照設定)
・Microsoft Scripting Runtime

検証環境
Microsoft Office Excel 2010 および 2016で検証しています。