
ExcelVBAでファイル選択ダイアログを表示して、選択したファイルパスを表示させる処理の備忘録です。今回はユーザーインターフェースの部分になるため、簡単な画面設計も含めてご紹介いたします。
やりたいこと
参照ボタンを押して、ファイル選択のダイアログから選んだファイルのパスをセルに表示させるようにします。画面設計
シート名を「入力画面」と名前を変更し、画像の通りセルB2に項目名、セルC2にファイルパスの入力欄、D2に参照ボタンを配置します。ボタンはCommandボタンでも良いのですが...デザイン性を重視?して、図形で作ってみました。色をグラデーションにするとボタンっぽくなります。
セルC2に「ファイルパス」と名前を付けてください(セルC2をアクティブにして名前ボックスに名前を入れてEnterで確定します)。名前を修正する場合は、メニューから「数式」 ➡ 「名前の管理」 で変更できます。
ソースコードを書き終えたら、参照ボタンを右クリックして「マクロの登録」からファイル選択のマクロを紐づけします。
ソースコード(ExcelVBA)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Option Explicit Private ObjWSH As WshShell Sub ファイル選択() Set ObjWSH = New WshShell Dim dlFolder As String dlFolder = ObjWSH.SpecialFolders( "Desktop" ) dlFolder = Replace(dlFolder, "Desktop" , "Downloads" ) ChDrive Drive:= "C" ChDir Path:=dlFolder Dim fileGroup As String : fileGroup = "CSV" Dim filePath As String Select Case fileGroup Case "EXCEL" filePath = Application.GetOpenFilename(FileFilter:= "Excelブック,*.xlsx" ) Case "CSV" filePath = Application.GetOpenFilename(FileFilter:= "CSVファイル,*.csv" ) Case "ALL" filePath = Application.GetOpenFilename(FileFilter:= "全てのファイル,*.*" ) End Select If filePath <> "False" Then ThisWorkbook.Worksheets( "入力画面" ).Range( "ファイルパス" ) = filePath Else MsgBox "キャンセルしました。" End If End Sub |
ポイント
- 実行にはツールの参照設定から「Windows Script Host Object Model」にチェックを入れてください。
- SpecialFolders(”Desktop”)でデスクトップのパスを取得し、その後Replaceでダウンロードフォルダに書き換えています。ChDir Pathでダウンロードフォルダを初期位置としています。
- Select文でExcelファイルのみ・CSVファイルのみなどのファイル指定ができます。Caseを増やすことで他の拡張子も対応可能です。
- ファイル選択ダイアログで「キャンセル」ボタンを押した場合(FilePathがFalseの場合)の処理も対応しています。
コメントを投稿
別ページに移動します