更新日:、 作成日:
VBA ファイルやフォルダと特殊なパスを取得する
はじめに
Excel VBA マクロでファイルやフォルダのパスと特殊なパスを取得する方法を紹介します。
File, Folder オブジェクトの Path プロパティから、そのパスを取得できます。
エクセルの実行パスや Windows のパスなども取得できます。
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 など
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\%USERNAME%\Desktop |
Application.Path | エクセルの .exe があるフォルダのパス C:\Program Files (x86)\Microsoft Office\root\Office16 |
Application.StartupPath | エクセル起動時に開かれるファイルなどが置いてあるフォルダ C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Excel\XLSTART |
Application.ActiveWorkbook.Path | 開いているアクティブなエクセルファイルのパス。保存していないエクセルでは空になります。 C:\Users\%USERNAME%\Desktop |
Application.ThisWorkbook.Path | VBA を実行しているエクセルファイルのパス。保存していないエクセルでは空になります。 C:\Users\%USERNAME%\Desktop |
Dim s As String
s = Application.DefaultFilePath
Debug.Print(s) ' C:\Users\Tipsfound\Desktop
%USERNAME% はログインしているユーザー名に置き換わります。
FileSystemObject オブジェクトから取得
コード | パスの例 |
fso.GetSpecialFolder(WindowsFolder) | Windows フォルダのパス C:\Windows |
fso.GetSpecialFolder(SystemFolder) | システムフォルダのパス C:\Windows\System32 |
fso.GetSpecialFolder(TemporaryFolder) | 環境変数 TMP のパス C:\Users\%USERNAME%\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\%USERNAME%\AppData\Roaming |
wsh.SpecialFolders("Desktop") | デスクトップ C:\Users\%USERNAME%\Desktop |
wsh.SpecialFolders("Favorites") | お気に入り C:\Users\%USERNAME%\Favorites |
wsh.SpecialFolders("Fonts") | フォント C:\Windows\Fonts |
wsh.SpecialFolders("MyDocuments") | ドキュメント C:\Users\%USERNAME%\Documents |
wsh.SpecialFolders("NetHood") | ネットワーク C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
wsh.SpecialFolders("PrintHood") | プリンタ C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
wsh.SpecialFolders("Programs") | スタートメニューのプログラム C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs |
wsh.SpecialFolders("Recent") | 最近使ったファイル C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Recent |
wsh.SpecialFolders("SendTo") | 送る C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\SendTo |
wsh.SpecialFolders("StartMenu") | スタートメニュー C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu |
wsh.SpecialFolders("Startup") | スタートアップ C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
wsh.SpecialFolders("Templates") | テンプレート C:\Users\%USERNAME%\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\Tipsfound\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\%USERNAME%\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
スポンサーリンク