【EXCEL VBA】ダイアログでファイルを指定する色々な方法

スポンサーリンク

はじめに

ひらちんです。

ユーザーに図のようなダイアログボックスでファイルを指定させて、その後の処理を行うようなプログラムはよくありますね(^o^)

ダイアログボックスでファイルを指定したり開いたりする方法には色々ありますので、今回はそのへんをまとめて紹介します!

スポンサーリンク

GetOpenFilenameメソッド

構文

Application.GetOpenFilename(FIleFilter, FilterIndex)

ApplicationオブジェクトのGetOpenFilenameメソッドです。

引数

FileFilter・・・ダイアログが開いたときに表示させるファイルの種類を指定します。

FilterIndex・・・FileFilterの引数に設定した候補が複数の場合、どれを既定値にするかを指定します。

次のコードは、EXCELブックを候補とするダイアログボックスを開き、ファイルを選択したら”res”という変数に結果を格納するコードのサンプルです。

格納した結果をイミディエイトウィンドウに出力しています。

Sub sample()

    Dim res As Variant
    res = Application.GetOpenFilename("Excelブック,*.xl??")
    
    Debug.Print res
    
End Sub

実行すると次のようになります。

画像の通りですが、GetOpenFilenameメソッドは、ダイアログで指定したファイルのフルパスを取得します。

そのまま指定したファイルを開きたい場合は、WorkbooksコレクションのOpenメソッドを使えばいいですね(^o^)

Sub sample()

    Dim res As Variant
    res = Application.GetOpenFilename("Excelブック,*.xl??")
    
  ’指定したファイルを開く
    If res <> "False" Then Workbooks.Open res 
    
End Sub

選択せずにキャンセルされた場合は、”False”が返るので、変数”res”が”False”でない場合だけ処理するように分岐しています。

ダイアログを開いたときに表示されるフォルダーは、その時点でのカレントフォルダになります。

指定のフォルダを表示させたい場合は、メソッドを実行する前に、ChDriveステートメントやChDirステートメントを使って、カレントフォルダを予め移動しておきましょう!

Sub sample()

    Dim res As Variant
    res = Application.GetOpenFilename("Excelブック,*.xl??")
    
  ’カレントフォルダを移動する
    ChDir "C:\ひらちんの部屋"

  ’指定したファイルを開く
    If res <> "False" Then Workbooks.Open res 
    
End Sub

スポンサーリンク

FindFileメソッド

構文

Application.FindFile

ApplicationオブジェクトのFindFileメソッドです。

このメソッドは、GetOpenFilenameとは違い、ダイアログボックスで選択すると自動的にファイルが開きます。

次のコードで試してみましょう。

この場合も、キャンセルされたときに備えます。

Falseが返った場合は、メッセージボックスに”キャンセルされました。”と表示しましょう。

Sub sample()

   If Application.FindFile = False Then
        MsgBox "キャンセルされました。"
   End If
    
End Sub

FindFileメソッド も GetOpenFilenameメソッド と同じようにダイアログを開いたときに表示されるフォルダはカレントフォルダになります。

こちらも、 指定のフォルダを表示させたい場合は、メソッドを実行する前に、ChDriveステートメントやChDirステートメントを使って、カレントフォルダを予め移動しておきましょう!

FileDialogオブジェクト

構文

Application.FileDialog(msoFileDialogOpen)

Application.FileDialog(msoFileDialogOpen)

FileDialogオブジェクトでダイアログボックスを開くと、ボタンの名前を変更したり、最初に開くフォルダを指定したりと詳細な設定が可能です。

サンプルで試してみましょう。

Sub sample()

    'FileDialogオブジェクトの準備
    Dim FD As FileDialog
    Set FD = Application.FileDialog(msoFileDialogOpen)
    
    '詳細のセッティング
    FD.Filters.Clear '最初に設定されている候補の表示設定のクリア
    FD.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1 '候補の表示設定
    FD.InitialFileName = "C:\ひらちんの部屋\" '最初に開くフォルダの設定
    
    '開くボタンが押された場合の処理
    If FD.Show = True Then
        FD.Execute  '開く
    Else
        MsgBox "キャンセルされました。"
    End If
       
End Sub

大きくは、

  1. FileDialogオブジェクトの準備
  2. 詳細のセッティング
  3. 開く

の段階になります。

詳細セッティングの部分では、これ以外にも様々な設定があります。

FD.Showは、「開く」ボタンが押されたときで、まだ実際には開きませんので注意してください。

FD.Showで開くボタンが押されると、Trueが返ります。

押された場合は、FD.Excuteで開く。

キャンセルや✕で開くが押されなかった場合は、メッセージを表示するように分岐しています。

ちなみに、選択されたファイルのパスは、FileDialogSelectedItemsに保存されます。

先程のコードのファイルを開いた部分を変更して、取得したファイルパスをメッセージボックスで表示するように修正します。

Sub sample()

    'FileDialogオブジェクトの準備
    Dim FD As FileDialog
    Set FD = Application.FileDialog(msoFileDialogOpen)
    
    '詳細のセッティング
    FD.Filters.Clear '最初に設定されている候補の表示設定のクリア
    FD.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1 '候補の表示設定
    FD.InitialFileName = "C:\ひらちんの部屋\" '最初に開くフォルダの設定
    
    '開くボタンが押された場合の処理
    If FD.Show = True Then
        MsgBox "選択されたファイルのPathは:" & FD.SelectedItems(1) '変更部分
    Else
        MsgBox "キャンセルされました。"
    End If
       
End Sub

ちなみに、どのダイアログボックスを開くかという定数は以下のようなものがあります。

定数名意味
msoFileDialogFilePicker[参照]ダイアログボックス
msoFileDialogFolderPicker[フォルダの選択]ダイアログボックス
msoFileDialogOpen[ファイルを開く]ダイアログボックス
msoFileDialogSaveAs[名前をつけて保存]ダイアログボックス

Dialogsコレクション

構文

Application.Dialogs(xlDialogOpen).Show

これでもダイアログボックスを使ってファイルを開くことが出来ます。

Dialogsコレクションの場合は、選択したファイルが自動的に開かれます。

Sub sample()

    Application.Dialogs(xlDialogOpen).Show
    
End Sub

Dialogsコレクションを使うと、”指定の文字列を含むファイル名だけ”などの指定も可能です。

例えば、”test”という文字列を含むファイルだけなどの指定は次のようになります。

Sub sample()
    
    Application.Dialogs(xlDialogOpen).Show "*test*.xls?"
    
End Sub

いろいろ方法があるので、時と場合に合わせて使い分けれるといいですね(^o^)

コメント

タイトルとURLをコピーしました