VBA 301号室:ファイルのフルパス取得(ファイル選択ダイアログ)

スポンサーリンク
VBAの部屋

Excelでファイルを選択するダイアログを表示してファイルのフルパスを取得する
(ファイル名も含む)

Kappo
Kappo

Excelで他の複数Excel上のシートデータ取り込むときに.....
 ●ファイルエクスプローラでファイルを探して、パスとファイル名を
  シートに記載する
ってなり、結構手間かかりませんか?!
この部屋ではこのプログラムでファイルダイアログを開いてファイル名を指定して
クリックすると開きたいファイルのフルパス及びファイル名が取得することが
可能でとっても便利ですよ!!
また、一番したの方にコメント欄があるからよかったら質問・感想などメッセージ入れてください

●●サブルーチンプログラム●●
標準モジュールを追加してモジュール名を「FileCtrl」にする
(Kappo):モジュール名は機能別に名前をつけた方が後々見やすいと思います
今回のモジュール名:「FileCtrl」は「File Contorl」を短くしたものです

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」

コマンドボタンがクリックされた時に実行されるプログラム
戻り後の処理
・ファイル名があった場合:フルパスとファイル名をメッセージ表示
・ファイル名が無かった場合:キャンセルされた旨のメッセージ表示

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関数:第一引数=分割したい文字列、第二引数=区切り文字

(例)”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
Amazon | 本, ファッション, 家電から食品まで | アマゾン
Amazon.co.jp 公式サイト。アマゾンで本, 日用品, ファッション, 食品, ベビー用品, カー用品ほか一億種の商品をいつでもお安く。通常配送無料(一部を除く)

  

VBAの部屋
スポンサーリンク
シェアする
Kappoをフォローする

コメント

タイトルとURLをコピーしました