プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、ファイルの選択ダイアログを表示する
結論から書くと「GetOpenFilename()」を使えばOKです。

一番単純なのは、例えばこんな感じφ(--)

Sub ボタン1_Click()
    Dim fileName As Variant

    'ファイル選択のダイアログを開く
    fileName = _
        Application.GetOpenFilename()


    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

これだけだと味気ないので、ダイアログのタイトルを指定してみましょうかφ(--)

Sub ボタン1_Click()
    Dim fileName As Variant

    'ファイル選択のダイアログを開く
    fileName = _
        Application.GetOpenFilename( _
         Title:="ファイルを選べ!" _
         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

ついでなんで、選択できる「ファイルの種類」も絞ってみましょうφ(--)

Sub ボタン1_Click()
    Dim fileName As Variant

    'ファイル選択のダイアログを開く
    fileName = _
        Application.GetOpenFilename( _
         Title:="ファイルを選べ!" _
         , FileFilter:="Excelの97-2003形式だよ,*.xls" & _
                         ",CSV形式だよ,*.csv" & _
                         ",テキストファイルだよ,*.txt" & _
                         ",なんでもOKだよ,*.*" _

         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

ここは解説が必要ですかね。
「ファイルの種類」を指定する「FileFilter」は

表示する文字列,ファイルのパターン(,表示する文字列,ファイルのパターン,……)

の順にカンマ区切りでズラズラと書けます。
サンプルでは見やすくするために適時改行していますが、
1行で

, FileFilter:="Excelの97-2003形式だよ,*.xls,CSV形式だよ,*.csv,テキストファイルだよ,*.txt,なんでもOKだよ,*.*" _

のように書くことも可能です。

「表示する文字列」はダイアログの「ファイルの種類」に表示される文言です。
例えば「すべてのファイル(*.*)」と表示されているところの「すべてのファイル」の部分ですね。
この文言を好きに指定できます。

「ファイルのパターン」は選択できるファイルの拡張子だと思っても構いません。
「*.xls」であればExcel、「*.csv」であればCSVファイルが選択対象になります。

では何故「ファイルの拡張子」ではなくわざわざ「ファイルのパターン」と書いたのか?

それは拡張子以外、その気になれば「aaa.*」とかも指定できるからです。

, FileFilter:="ほげほげ,aaa.*" _

とか書けちゃいます。
そうすると「aaa.txt」「aaa.csv」のようにファイル名が「aaa」のファイルのみが表示されます。
使いどころは少ないと思いますけどね。

あくまで「フィルター」なのです。
拡張子以外でも絞り込めます。

そんな感じ(--)ノ

あっ、そうそう。
初期状態で、任意の「ファイルの種類」を選択状態にすることも可能です。

例えばこんなコードを書くとφ(--)

Sub ボタン1_Click()
    Dim fileName As Variant

    'ファイル選択のダイアログを開く
    fileName = _
        Application.GetOpenFilename( _
         Title:="ファイルを選べ!" _
         , FileFilter:="Excelの97-2003形式だよ,*.xls" & _
                         ",CSV形式だよ,*.csv" & _
                         ",テキストファイルだよ,*.txt" & _
                         ",なんでもOKだよ,*.*" _
         , FilterIndex:=2 _
         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

「CSV形式だよ(*.csv)」が初期状態で選択された状態になりますよ。

ファイルの種類の説明は、そんな感じです。

あとは、そうですね。

ファイルを複数選択できるようにすることも可能ですφ(--)

Sub ボタン1_Click()
    Dim fileName As Variant

    'ファイル選択のダイアログを開く
    fileName = _
        Application.GetOpenFilename( _
         Title:="ファイルを選べ!" _
         , FileFilter:="Excelの97-2003形式だよ,*.xls" & _
                         ",CSV形式だよ,*.csv" & _
                         ",テキストファイルだよ,*.txt" & _
                         ",なんでもOKだよ,*.*" _
         , FilterIndex:=2 _
         , MultiSelect:=True _
         )

'    If fileName <> False Then
'        MsgBox fileName
'    End If

    If IsArray(fileName) = True Then
        For i = 1 To UBound(fileName)
            MsgBox fileName(i)
        Next i
    End If


End Sub

注意点として、複数選択時の戻りは配列です。
文字列として参照しないようにご注意ください。

そんなところですかね。

ってなところで、ExcelVBAでファイルの選択ダイアログを表示するの、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事