サイトについて      連絡先   検索

VBA ファイルやフォルダのパスと特殊なパスを取得する

はじめに

Excel VBA マクロでファイルやフォルダのパスと特殊なパスを取得する方法を紹介します。

File, Folder オブジェクトの Path プロパティから、そのパスを取得できます。

エクセルの実行パスや Windows のパスなども取得できます。

  • 目次
    • FileSystemObject について
    • ファイルやフォルダのパスを取得する
    • 特殊フォルダのパスを取得する

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

ファイルやフォルダのパスを取得する

ファイルのパスを取得

フォルダ内にあるファイルのパスを取得するには次のようにします。


Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim fl As Folder
Set fl = fso.GetFolder("D:\TipsFolder") ' フォルダを取得

Dim s As String
Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
        s = f.Path      ' パスを取得
        Debug.Print (s) ' D:\TipsFolder\Tips.txt など
    End If
Next

' 後始末
Set fso = Nothing

fso.GetFolder関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

fl.Filesプロパティから、そのフォルダの File オブジェクトの一覧を取得できます。

f.Pathプロパティから、そのファイルのパスを取得します。File オブジェクトさえ取得できれば、そこからパスを取得できます。

フォルダのパスを取得

サブフォルダのパスを取得するには次のようにします。


Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim pfl As Folder
Set pfl = fso.GetFolder("D:\TipsFolder") ' 親フォルダを取得

Dim s As String
Dim fl As Folder
For Each fl In pfl.SubFolders ' サブフォルダの一覧を取得
    s = fl.Path     ' パスを取得
    Debug.Print (s) ' D:\TipsFolder\SubTips など
Next

' 後始末
Set fso = Nothing

fso.GetFolder関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

pfl.SubFoldersプロパティから、そのフォルダ内にある Folder オブジェクトの一覧を取得できます。

fl.Pathプロパティから、そのフォルダのパスを取得します。Folder オブジェクトさえ取得できれば、そこからパスを取得できます。

特殊フォルダのパスを取得する

Application オブジェクトから取得

コード パスの例
Application.DefaultFilePathエクセルを保存するときの既定のパス
C:\Users\ユーザー名\Desktop
Application.Pathエクセルの .exe があるフォルダのパス
C:\Program Files (x86)\Microsoft Office\root\Office16
Application.StartupPathエクセル起動時に開かれるファイルなどが置いてあるフォルダ
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART
Application.ActiveWorkbook.Path開いているアクティブなエクセルファイルのパス。保存していないエクセルでは空になります。
C:\Users\ユーザー名\Desktop
Application.ThisWorkbook.PathVBA を実行しているエクセルファイルのパス。保存していないエクセルでは空になります。
C:\Users\ユーザー名\Desktop

Dim s As String

s = Application.DefaultFilePath
Debug.Print (s) ' C:\Users\ユーザー名\Desktop

FileSystemObject オブジェクトから取得

コード パスの例
fso.GetSpecialFolder(WindowsFolder)Windows フォルダのパス
C:\Windows
fso.GetSpecialFolder(SystemFolder)システムフォルダのパス
C:\Windows\System32
fso.GetSpecialFolder(TemporaryFolder)環境変数 TMP のパス
C:\Users\ユーザー名\AppData\Local\Temp

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Dim s As String
Dim fl As Folder
Set fl = fso.GetSpecialFolder(WindowsFolder)
s = fl.Path
Debug.Print (s) ' C:\Windows

Set fso = Nothing

WScript.Shell オブジェクトから取得

コード パスの例
wsh.SpecialFolders("AllUsersDesktop")共通のデスクトップ
C:\Users\Public\Desktop
wsh.SpecialFolders("AllUsersStartMenu")共通のスタートメニュー
C:\ProgramData\Microsoft\Windows\Start Menu
wsh.SpecialFolders("AllUsersPrograms")共通のスタートメニューのプログラム
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
wsh.SpecialFolders("AllUsersStartup")共通のスタートアップ
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
wsh.SpecialFolders("AppData")アプリケーションデータ
C:\Users\ユーザー名\AppData\Roaming
wsh.SpecialFolders("Desktop")デスクトップ
C:\Users\ユーザー名\Desktop
wsh.SpecialFolders("Favorites")お気に入り
C:\Users\ユーザー名\Favorites
wsh.SpecialFolders("Fonts")フォント
C:\Windows\Fonts
wsh.SpecialFolders("MyDocuments")ドキュメント
C:\Users\ユーザー名\Documents
wsh.SpecialFolders("NetHood")ネットワーク
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Network Shortcuts
wsh.SpecialFolders("PrintHood")プリンタ
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
wsh.SpecialFolders("Programs")スタートメニューのプログラム
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
wsh.SpecialFolders("Recent")最近使ったファイル
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Recent
wsh.SpecialFolders("SendTo")送る
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo
wsh.SpecialFolders("StartMenu")スタートメニュー
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu
wsh.SpecialFolders("Startup")スタートアップ
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
wsh.SpecialFolders("Templates")テンプレート
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Templates

Dim wsh As Object
Set wsh = CreateObject("WScript.Shell") ' インスタンス化

Dim s As String
s = wsh.SpecialFolders("Desktop")       
Debug.Print (s) ' C:\Users\ユーザー名\Desktop

Set wsh = Nothing

環境変数のパスを取得

コード パスの例
wsh.ExpandEnvironmentStrings("%PATH%")環境変数 PATH のパスを取得
C:\Program Files (x86)\Microsoft Office\Root\Office16\;・・・
wsh.ExpandEnvironmentStrings("%ProgramFiles%")環境変数 ProgramFiles のパスを取得
C:\Program Files (x86)
wsh.ExpandEnvironmentStrings("%TMP%")環境変数 TMP のパスを取得
C:\Users\ユーザー名\AppData\Local\Temp
% で囲った環境変数名のパスを取得します。

Dim wsh As Object
Set wsh = CreateObject("WScript.Shell") ' インスタンス化

Dim s As String
s = wsh.ExpandEnvironmentStrings("%ProgramFiles%")
Debug.Print (s) ' C:\Program Files (x86)

Set wsh = Nothing
  • 目次
    • FileSystemObject について
    • ファイルやフォルダのパスを取得する
    • 特殊フォルダのパスを取得する