VBA

ファイルを選択するダイアログを開くマクロ【Excel VBA】

2019-11-10

ファイルを選んで、そのファイルに何らかの編集やマクロの適用などをしたいときに使うファイルダイアログですが

今回は、ダイアログを開く方法に加え、デフォルトで表示する拡張子を指定したり等自由にカスタマイズできる部分についても解説していきたいと思います。

ソースコード

引数に行と列を指定することで特定のセルにダイアログで選択したファイルのアドレスを出力します。

既にセルにアドレスがある場合は、そのファイルを選択した状態でダイアログが開きます。ネットワークドライブでも有効なのでいちいちマイドキュメント等に戻される手間を回避できます。

ボタンに登録するときには、'SelectFile 2,2'のようにします。

Sub SelectFile(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(msoFileDialogFilePicker)
    .Filters.Clear
    .Filters.Add "すべてのファイル", "*.*"
    .Filters.Add "Excel ブック", "*.xlsx"
    .Filters.Add "Excel マクロ有効ブック", "*.xlsm"
    .Filters.Add "Excel 97-2003 ブック", "*.xls"
    
    .FilterIndex = 1
    
    .AllowMultiSelect = False
    
    If FSO.FileExists(OpenFile) = True Then
      .InitialFileName = OpenFile
    End If
    
    If .Show = True Then
      ActiveCell.Value = .SelectedItems(1)
    End If
  End With
End Sub

フィルターの設定

ファイルを選択する際にプルダウンメニューから選択できるフィルターです。

Filters.Clearでフィルターを初期化し、Filters.Addで追加していきます。

最後にFilterIndexでダイアログを開いた時、デフォルトで設定するフィルターを選択します。

  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Clear
    .Filters.Add "すべてのファイル", "*.*"
    .Filters.Add "Excel ブック", "*.xlsx"
    .Filters.Add "テキストファイル", "*.txt"
    .FilterIndex = 1
  End With

単一ファイル選択または複数ファイル選択

AllowMultiSelectがFalseなら単一ファイル選択、

AllowMultiSelectがTrueなら複数ファイル選択です。

今回は特定セルに出力しているので単一ファイルとしていますが、

場合によっては複数ファイル選択して処理しても良いでしょう。

  With Application.FileDialog(msoFileDialogFilePicker)    
    .AllowMultiSelect = False
  End With

初期選択ファイルを設定(前回のファイルを参照)

InitialFileNameにフルパスを指定することで、ファイルを選択した状態でダイアログを開くことができます。

さらにそのファイルのあるフォルダまで遷移した状態になります。

フルパス(前回の情報)をどこかに保存しておく必要がありますが、再選択にかかる時間を削減できるとても便利な機能です。

※ファイルが削除・移動などされている可能性を考慮し、FilesystemobjectのFileExistsでファイルの存在を再確認しましょう。

  With Application.FileDialog(msoFileDialogFilePicker)
    If FSO.FileExists(OpenFile) = True Then
      .InitialFileName = OpenFile
    End If
  End With

選択したファイルを取得する

ダイアログで選択したファイルをセルへ出力するには以下のようにします。

Showでダイアログの表示を確認し、SelectedItemsから選択したファイル情報を取得します。

  With Application.FileDialog(msoFileDialogFilePicker)
    If .Show = True Then
      ActiveCell.Value = .SelectedItems(1)
    End If
  End With

参照設定

使用の際には以下参照設定が必要となります。CreateObjectでも代用可能です。

(開発タブ>Visual Basic>ツール(T)>参照設定)

・Microsoft Scripting Runtime

クリックすると別ウィンドウで拡大表示

検証環境

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

-VBA
-

© 2021 ReiCodeBlog