和風スパゲティのレシピ

日本語でコーディングするExcelVBA

GetOpenFilenameとFileDialogの違い

ダイアログボックスによるファイル選択を実行する、
GetOpenFilenameメソッドとFileDialogオブジェクトの違いを解説します。

FileDialogオブジェクトにはフォルダを選択する機能もありますが、
本記事ではファイルの選択(msoFileDialogFilePicker指定時)を対象とします。

同じところ

どちらもファイルを選択するダイアログボックスを開きます。

「選択されたファイルのパスを文字列として受け取る機能である」
という点も同じで、どちらも開くなどの処理は行われませんので、
ファイルへの処理コードは別途書く必要があります。

違うところ

FileDialogの方が高機能ですがコードが面倒という特徴があります。

使用頻度が高い機能としては「初期表示するフォルダの指定機能」があり、
こちらはFileDialogオブジェクト限定の機能となります。

※ GetOpenFilenameでもカレントディレクトリを変更すれば、
一応初期フォルダを疑似的に変更することは可能です。


他に「実行ボタンのテキスト」「開くフォルダの表示設定」も、
FileDialogオブジェクト限定の機能となります。

詳細については以下の引数・プロパティ一覧をご覧ください。

GetOpenFilenameの引数一覧

引数 内容
FileFilter ファイルの種類を指定する文字列("Excelファイル,*.xls*"など)
FilterIndex 複数のファイル種類を指定した場合に何番目を規定とするか
Title ダイアログボックスのタイトルを指定します。
この引数を省略すると「ファイルを開く」になります。
ButtonText MacPC限定の設定です。
MultiSelect Trueを指定すると複数のファイルを選択できます。
この場合は結果は配列として返されます。

FileDialogの代入可能プロパティ一覧

プロパティ 内容
Title FileDialog オブジェクトを使用して表示されるファイルのダイアログ ボックスのタイトルを取得または設定します。
ButtonName ダイアログボックスの実行ボタンのテキストを設定できます。
InitialView フォルダの表示状態(詳細やプレビュー、大アイコンなど)を指定できます。
InitialFileName 初期表示するフォルダパス・ファイル名を指定します。
Filters 表示するファイルの種類をAddメソッドで追加できます。
FilterIndex 表示するファイルの種類が複数ある場合に何番目を規定とするか指定します。
AllowMultiSelect Tureを指定すると複数ファイルを選択できるようになります。
規定値はTrueです。


コード上の違いとしては、
GetOpenFilenameはメソッド、FileDialogはオブジェクトですので、
前者は引数の指定、後者はプロパティへの代入でダイアログの設定を行います。

ユーザー指定ファイルパス = Application.GetOpenFilename( _
    FileFilter:="Excelファイル,*.xls*", _
    Title:="処理ブックを選択してください。")
With Application.FileDialog(msoFileDialogFilePicker)

    .Filters.Clear
    .Filters.Add "Excelファイル", "*.xlsx"
    .Filters.Add "Excelファイル", "*.xls"
    .Filters.Add "Excelファイル", "*.xlsm"

    .Title = "処理するファイルを選択してください。"
    
    .Show
    
End With

FileDialogが高機能だがコードが面倒という点は、
このプロパティの代入が必要というところが大きいですね。

使い分け

GetOpenFilenameメソッドはOpenと銘打っていますが、
上記の通り別にファイルを開くわけではありませんので、
ファイルを開く以外の用途に使用しても全く問題ありません。


よって、通常は手軽なGetOpenFilenameメソッドを使用しておき、
FileDialogオブジェクトしかない機能が必要になったらそちらを使えばOKです。


あとは冒頭でも述べましたが、
FileDialogオブジェクトには「フォルダ選択ダイアログ」を表示する機能があります。

GetOpenFoldernameなるメソッドはありませんので、
フォルダ選択にはFileDialogオブジェクトを使用してください。