Microsoft Excel VBA - ファイルを開くダイアログボックスを使う方法

◆概要

このページは、Excel VBAでファイルを開くダイアログボックスを使う方法について記載しています。

GetOpenFilenameメソッドは、Excelがもっている「ファイルを開く」ダイアログボックスを使用できるようにするメソッドです。実行すると「ファイルを開く」ダイアログボックスが表示され、ユーザーによってファイルが選択されると、そのファイル名をドライブを含むフルパスで返してきます。ダイアログボックスの「キャンセル」ボタンが押された場合は、メソッドは"False"を返してきます。 メソッドの実行については、いくつかの引数を操作することで、ダイアログボックスに表示するファイルの種類やウィンドウのタイトルを設定することができます。

◆Sample code

Sub OpenFilesDlg()

   Application.GetOpenFilename ("Excelブック (*.xls),*xls")

End Sub
  

次の例は、「ファイルを開く」ダイアログボックスに、Excelのブックとテキストファイルを表示するファイルフィルタを設定し、ユーザーによってファイル名が選択されると、メッセージボックスを使用してそのファイル名のフルパスを表示します。 キャンセルボタンが押されると、その旨をメッセージボックスで表示します。

Sub OpenFilesDlg2()

    Dim Ret As Variant

    Ret = Application.GetOpenFilename( _
    "Excelブック (*.xls),*.xls, テキストファイル(*.txt),*.txt")

    If Ret = False Then
        MsgBox "キャンセルが選択されました。"
    Else
        MsgBox Ret & "が選択されました。"
    End If
End Sub
  

複数のファイルを選択するときは次のようにします。

Sub ファイル選択()
    Dim 選択結果 As Integer
    Dim a As Integer
    
    With Application.FileDialog(msoFileDialogFilePicker)
    '複数のファイル選択
    .AllowMultiSelect = True
    'フィルタのクリア
    .Filters.Clear
    'フィルタの設定
    .Filters.Add "ブック", "*.xls"
        選択結果 = .Show
        If 選択結果 = 0 Then
            Exit Sub
        End If
        For a = 1 To .SelectedItems.Count
            MsgBox .SelectedItems(a)
        Next
    End With
End Sub
  

◆ファイルパスを指定して「ファイルを開く」ダイアログボックスを表示する
 GetOpenFilename メソッドでは、既定のファイルパスを指定することができません。ファイルパスを指定して「ファイルを開く」ダイアログボックスを表示するには、ApplicationオブジェクトのFileDialogメソッドを使用します。

◆Sample code
次の例は、Sheets1のセルA1に入力されたファイルパスを取得し、そのファイルパスを既定のパスとして「ファイルを開く」ダイアログボックスを表示します。

Function OpenFileDialog(strFilename As String) As String
' ***************************************************************
' Summary:ファイルを開くダイアログボックスを表示する
' 引数:ファイル名(フルパス)。文字列型。ワイルドカード使用可能
' 戻値:ファイルのフルパス。文字列型
' Date:2009/06/23
' Written by:White Tiger
' ***************************************************************

  'ダイアログ
  Dim FileDlg As Office.FileDialog
  'ファイルパス
  Dim FilePath As String
  'ファイルを選択したかどうか(0=選択していない, -1=選択した)
  Dim Result As Integer

  FilePath = ""
  'ファイルダイアログの種類を指定
  Set FileDlg = Application.FileDialog(msoFileDialogFilePicker)
  With FileDlg
    'ダイアログで最初に表示するファイルパス
    .InitialFileName = strFilename
    'ダイアログに表示するファイル種別
    .Filters.Add "Excel 97-2003ファイル(*.xls)", "*.xls"
    'ダイアログ表示時に有効にするファイル種別のインデックス
    .FilterIndex = 3
    '複数ファイルの選択を無効にする
    .AllowMultiSelect = False
  End With
  Result = FileDlg.Show()

  'ファイルが選択された場合、選択したファイル名を返す
  If Result = -1 Then
    FilePath = FileDlg.SelectedItems(1)
  End If
  Set FileDlg = Nothing

  OpenFileDialog = FilePath
End Function

Sub test()
'***************************************************************
' Summary:指定したファイルを開く
' Description:OpenFileDialogを呼び出し
' Date:2009/06/25
' Written by:White Tiger
' **************************************************************

    Dim strFilename As String
    Dim databook As Workbook
    Dim strFilePath As String
    
     ' ファイルパスをシート「入力ベース」のセルA1から取得する
    strFilePath = CStr(Worksheets(1).Range("A1").Value)
    ' A1が未入力の時はC:\を既定にする
    If IsNull(strFilePath) Then
        strFilePath = "C:\"
    End If
    
    ' ファイルを開くダイアログボックスを表示する
    strFilename = OpenFileDialog(strFilePath & "\給与*.xls")
    If strFilename = "" Then   ' ユーザーがキャンセルを選択したとき
        Exit Sub        ' 処理を抜ける
    ' ユーザーがファイルを選択したとき
    Else
        ' ユーザーが指定したファイルを開く
        Set databook = Workbooks.Open(Filename:=strFilename)
    End If
End Sub



▼ページトップへ