Excelでファイルを選択するダイアログを表示してファイルのフルパスを取得する
(ファイル名も含む)
Excelで他の複数Excel上のシートデータ取り込むときに.....
●ファイルエクスプローラでファイルを探して、パスとファイル名を
シートに記載する
ってなり、結構手間かかりませんか?!
この部屋ではこのプログラムでファイルダイアログを開いてファイル名を指定して
クリックすると開きたいファイルのフルパス及びファイル名が取得することが
可能でとっても便利ですよ!!
また、一番したの方にコメント欄があるからよかったら質問・感想などメッセージ入れてください
ファイルダイアログを表示させるプログラム
●●サブルーチンプログラム●●
標準モジュールを追加してモジュール名を「FileCtrl」にする
(Kappo):モジュール名は機能別に名前をつけた方が後々見やすいと思います
今回のモジュール名:「FileCtrl」は「File Contorl」を短くしたものです
※標準モジュールを追加は「VBA:描画オブジェクトの名前取得」を参照してください
Function FileSelect(Optional opFolder As String = “C:\”)
引数:初期に表示されるフォルダを指定します(省略可能=初期値”C:\”)
選択表示できるファイルの種類:全て、CSVファイル、Excelファイル(xlsx)、テキスト(txt)
▼プログラム▼
Function FileSelect(Optional opFolder As String = "C:\")
Dim flDialog As FileDialog
Dim buf
Dim fPath As String '選択したファイルのフルパス
fPath = ""
'開くファイルダイアログの種類をセットします
'引数:msoFileDialogFilePicker = ユーザーがファイルを選択するのを許可
' msoFileDialogFolderPicker = ユーザーがフォルダを選択するのを許可
' msoFileDialogOpen = ユーザーがファイルを開くのを許可
' msoFileDialogSaveAs = ユーザーがファイルを保存するのを許可
Set flDialog = Application.FileDialog(msoFileDialogFilePicker)
flDialog.Filters.Clear '選択条件を一旦クリアします
flDialog.Filters.Add "全てのファイル", "*.*", 1 '一覧の位置番号=1番目ー下図①
flDialog.Filters.Add "CSVファイル", "*.csv", 2 '一覧の位置番号=2番目ー下図②
flDialog.Filters.Add "Excelファイル", "*.xlsx", 3 '一覧の位置番号=3番目ー下図③
flDialog.Filters.Add "テキストファイル", "*.txt", 4 '一覧の位置番号=4番目ー下図④
flDialog.FilterIndex = 1 '選択を表示させる番号
'「OK」ボタンが押された=True、「キャンセル」ボタンが押された=Fale
If flDialog.Show = True Then
fPath = flDialog.SelectedItems(1) '選択されたファイルのフルパスを代入
Else
fPath = ""
End If
FileSelect = fPath
End Function
呼びだすプログラム(例)
サブルーチンプログラムが出来たので呼びだすコマンドボタンを配置してプログラムを記述する
「CommandButton2」
※ボタンの配置方法は「VBA:描画オブジェクトの名前取得」を参照してください
コマンドボタンがクリックされた時に実行されるプログラム
戻り後の処理
・ファイル名があった場合:フルパスとファイル名をメッセージ表示
・ファイル名が無かった場合:キャンセルされた旨のメッセージ表示
Dim fPath As String 'ファイルのフルパス
Dim fName As String 'ファイル名
Dim buf
Dim msgStr As String
fPath = FileSelect()
If fPath <> "" Then '戻り値に情報があった場合
buf = Split(fPath, "\") 'ファイルのフルパスを'\'で区切る
fName = buf(UBound(buf)) 'ファイル名の取得
msgStr = "フルパス = " & fPath
msgStr = msgStr & vbCrLf & vbCrLf
msgStr = msgStr & "ファイル名 = " & fName
Call MsgBox(msgStr, vbInformation + vbOKOnly, "メッセージ")
Else
Call MsgBox("ファイル選択をキャンセルしました", vbInformation+vbOkOnly, "メッセージ")
End If
プログラムの実行
ファイルを選択して「OK」ボタンを押した場合
「キャンセル」ボタンを押した場合
プログラム内の便利関数(Split、Uobund)
Split関数:第一引数=分割したい文字列、第二引数=区切り文字
(例)”C:¥Sample¥Test\Sample.xlsx”を"\"で分割
配列変数A=Split(”C:¥Sample¥Test\Sample.xlsx”, "\")
↓
出力:配列変数A(0)=”C:”、配列変数A(1)=”Sample”、配列変数A(2)=”Test”、配列変数A(3)=”Sample.xlsx”
Ubound関数:配列数を返す・・・Split関数とセットでよく使います(Kappo)
(例)上記(Spliit関数(例))の配列変数A
配列数B=Ubound(配列変数A)
↓
出力:配列数B=3
コメント