VBA 特殊フォルダの指定方法

 SeleniumBasicでよく特殊フォルダ指定する事があるため、VBAで利用できる特殊フォルダの指定方法を中心に解説します。VBAで利用できるコマンドの他、直接Windowsのフォルダアドレス欄に入力する方法も紹介したいと思います。検証デバイスのOSは、Windows11です。

目次

Shellコマンドによる特殊フォルダ指定

 Shellコマンドによる特殊フォルダの指定方法を紹介します。パラメータ一覧で紹介しているコマンド名は、直接Windowsのフォルダアドレス欄に入力してもフォルダ移動が可能です。VBAでは、Shell.Applicationクラス内のNamespaceメソッドを使用し、引数にパラメータ一覧のパラメータかIndex値を指定します。

クラス指定

事前バインディング(VBEの参照設定)

Microsoft Shell Controls And Automation

実行時バインディング(CreateObjectセット)

CreateObject("Shell.Application")

Example

事前バインディングを利用した場合の特殊フォルダ指定の方法です。

Private Sub 特殊フォルダ_Shell事前バインディング()
   'VBEの参照設定で、事前に「Microsoft Shell Controls And Automation」を選択
    Dim shell As New Shell32.shell, Fld As Shell32.Folder2
    Dim shellStr As String: shellStr = "shell:Local AppData"
    Set Fld = shell.Namespace(shellStr)
    Debug.Print Fld.Self.Path
End Sub

実行時バインディングを利用した場合の特殊フォルダ指定の方法です。

Private Sub 特殊フォルダ_Shell実行時バインディング()
    'https://learn.microsoft.com/ja-jp/windows/win32/shell/shell-namespace
    Dim shellPath As String
    Dim shellStr: shellStr = "shell:Local AppData"  'Variant型、String型を指定するとエラー発生
    shellPath = CreateObject("Shell.Application").Namespace(shellStr).Self.Path
    Debug.Print shellPath
End Sub

 Index値が割り当てられているshellコマンドで指定可能な特殊フォルダ一覧をイミディエイトウィンドウに出力するコードになります。0番から61番までの間に断続的に割り当てられています。62番から255番までは特に割り当てはなく、256番からまた0番と同じ割り当てが開始されます。

Private Sub 特殊フォルダ_ShellIndex一覧取得()
   'VBEの参照設定で、事前に「Microsoft Shell Controls And Automation」を選択
    Dim shell As New Shell32.shell
    Dim i As Integer
On Error GoTo ErrHandle
    For i = 0 To 61
        Debug.Print i & " " & shell.Namespace(i).Self.Path
ErrResume:
    Next i
    Exit Sub
ErrHandle:
Resume ErrResume
End Sub

パラメータ一覧

パラメータ一覧は、特殊フォルダに利用できそうなパラメータを掲載しました。

スクロールできます
パラメータIndexフォルダー名ディレクトリパス
shell:AppData26RoamingC:\Users\<ユーザー名>\AppData\Roaming
shell:UserProgramFilesLocal\ProgramsC:\Users\<ユーザー名>\AppData\Local\Programs
shell:Local AppData28LocalC:\Users\<ユーザー名>\AppData\Local
shell:Cookies33INetCookiesC:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows\INetCookies
shell:Profile40ユーザ名C:\Users\<ユーザー名>
shell:Startup29StartupC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
shell:Cache32INetCacheC:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows\INetCache
shell:My Music13マイミュージックC:\Users\<ユーザ名>\Music
shell:My Pictures39マイピクチャーC:\Users\<ユーザ名>\Pictures
shell:My Video14マイビデオC:\Users\<ユーザ名>\Videos
shell:DownloadsダウンロードC:\Users\<ユーザ名>\Downloads
shell:Personal5マイドキュメントC:\Users\<ユーザ名>\Documents
shell:Desktop0デスクトップC:\Users\<ユーザ名>\Desktop
shell:RecycleBinFolder10ごみ箱::{645FF040-5081-101B-9F08-00AA002F954E}
shell:OneDriveOneDrive

多くのサイトでshellコマンドの紹介していますので、参照したページのリンクリストを以下に残しておきます。

WSHによる特殊フォルダ指定

 特殊フォルダを指定するのにSpecialFoldersメソッドを利用します。引数は、Index(数値)か、パラメータ(文字列)を指定します。Indexとパラメータは以下のパラメータ一覧を参照ください。

クラス指定

事前バインディング(VBEの参照設定)

Windows Script Host Object Model

実行時バインディング(CreateObjectセット)

CreateObject("WScript.Shell")

Example

事前バインディングを利用した場合の特殊フォルダ指定の方法です。

Private Sub 特殊フォルダ_WSH事前バインディング()
    'VBEの参照設定で、事前に「Windows Script Host Object Model」を選択
    Dim wsh As New IWshRuntimeLibrary.WshShell
    Debug.Print wsh.SpecialFolders("DeskTop")
End Sub

実行時バインディングを利用した場合の特殊フォルダ指定の方法です。

Private Sub 特殊フォルダ_WSH実行時バインディング()
    Dim wsh As Object: Set wsh = CreateObject("WScript.Shell")
    Debug.Print wsh.SpecialFolders("DeskTop")
End Sub

Index値を入力し、Environ関数で出力できる一覧をイミディエイトウィンドウに出力します。

Private Sub 特殊フォルダ_WSH_All()
    'VBEの参照設定で、事前に「Windows Script Host Object Model」を選択
    Dim wsh As New IWshRuntimeLibrary.WshShell
    Dim FldPath As String
    Dim i As Integer
    For i = 0 To wsh.SpecialFolders.Count - 1
        Debug.Print i & " " & wsh.SpecialFolders(i)
    Next i
End Sub

パラメータ一覧

スクロールできます
パラメータIndexフォルダ名ディレクトリーパス
AllUsersDesktop0全ユーザー共通のデスクトップC:\Users\Public\Desktop
AllUsersStartMenu1全ユーザー共通のプログラムメニューC:\ProgramData\Microsoft\Windows\Start Menu
AllUsersPrograms2全ユーザー共通のプログラムC:\ProgramData\Microsoft\Windows\Start Menu\Programs
AllUsersStartup3全ユーザー共通のスタートアップC:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
Desktop4デスクトップC:\Users\<ユーザー名>\Desktop
AppData5AppData\RoamingフォルダC:\Users\<ユーザー名>\AppData\Roaming
PrintHood6プリンタショートカットフォルダC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
Templates7TemplatesフォルダC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Templates
Fonts8フォントフォルダC:\Windows\Fonts
NetHood9Network ShortcutsフォルダC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Network Shortcuts
Desktop10デスクトップC:\Users\<ユーザー名>\Desktop
StartMenu11スタートメニューC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu
SendTo12SendToフォルダC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\SendTo
Recent13最近使った項目C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Recent
Startup14スタートアップフォルダC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Favorites15お気に入りC:\Users\<ユーザー名>\Favorites
MyDocuments16マイドキュメントC:\Users\<ユーザー名>\Documents
Programs17プログラムメニューC:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

Environ関数による特殊フォルダ指定

 Windowsの環境変数にまつわるフォルダや情報を取得するEnviron関数を利用し、特殊フォルダを指定します。

出力方法

 このページでは基本的にVBAでの出力方法を紹介していますが、その他の出力方法も多くあって、使えると便利ですのでここで紹介します。

VBAで指定

 Environ("TEMP")の様にEnviron関数を利用します。引数は、Index(数値)か、パラメータ名(文字列)を指定します。Indexとパラメータ名は、以下のパラメータ一覧を参照ください。

フォルダアドレス欄に直接入力

 フォルダパスに関しては、フォルダアドレス欄に"%TEMP%"の様に"%"でパラメータ名を囲んで入力すると指定のフォルダを開く事ができます。"PATH"の様なパラメータ名の場合は、出力結果がフォルダパスの一覧になるため、直接フォルダアドレス欄に入力してもディレクトリ移動はしません。

ファイル名を指定して実行

 windowsボタン+Rにて「ファイル名を指定して実行」ダイアログボックスを出力させ、"%TEMP%"の様に"%"でパラメータを囲んで入力すると指定のフォルダを開く事ができます。

コマンドプロンプトで出力

 コマンドプロンプトを起動し、"echo %TEMP%"の様に"%"でコマンド名を囲んでechoコマンドを実行すると指定のフォルダ名や環境変数に格納されている値を出力します。

Example

パラメータを指定し、Environ関数で特殊フォルダや環境変数に格納している値をイミディエイトウィンドウに出力します。

Private Sub 特殊フォルダ_Environ_Simple()
    Dim shellStr As String
    shellStr = Environ("USERPROFILE")
    Debug.Print shellStr
End Sub

Index値を入力し、Environ関数で出力できる一覧をイミディエイトウィンドウに出力します。

Private Sub 特殊フォルダ_Environ_All()
    Dim envStr As String, i As Integer
    With Sheet3
    i = 1
    Do Until Environ(i) = ""
        Debug.Print i & " " & Environ(i)
        i = i + 1
    Loop
    End With
End Sub

パラメータ一覧

パラメータ名Idx解説ディレクトリーパス
ALLUSERSPROFILE1All UsersのプロファイルパスC:\ProgramData
APPDATA2AppData\RoamingフォルダC:\Users\<ユーザ名>\AppData\Roaming
CommonProgramFiles3プログラムファイル用の共通ディレクトリC:\Program Files\Common Files
CommonProgramFiles(x86)4プログラムファイル(x86)用の共通ディレクトリC:\Program Files (x86)\Common Files
CommonProgramW64325プログラムファイル用の共通ディレクトリC:\Program Files\Common Files
COMPUTERNAME6コンピュータ名コンピュータ名等
ComSpec7cmd.exe(コマンドプロンプト)のフルパスC:\WINDOWS\system32\cmd.exe
DriverData8フォルダC:\Windows\System32\Drivers\DriverData
~省略~91
FPS_BROWSER_APP_PROFILE_STRING10ブラウザアプリ名(Internet Explorer)Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING11ブラウザユーザ名Default
HOMEDRIVE12ホームドライブC:
HOMEPATH13ユーザーのホームディレクトリパス\Users\<ユーザ名>
LOCALAPPDATA14AppData\LocalフォルダC:\Users\<ユーザ名>\AppData\Local
LOGONSERVER15ログオン中のサーバ名前コンピュータ名等
NUMBER_OF_PROCESSORS16PCのプロセッサー数~省略~
OneDrive17OneDrive for Businessのパス名C:\Users\<ユーザ名>\OneDrive
OneDriveCommercial18OneDrive for Businessのパス名C:\Users\<ユーザ名>\OneDrive
OneDriveConsumer19個人用OneDriveのパス名C:\Users\<ユーザ名>\OneDrive
OS20OS名Windows_NT等
Path21環境変数Pathに設定されているパスの一覧(;区切り)~省略~
PATHEXT22拡張子なしで実行できるファイルの一覧(;区切り)~省略~
POWERSHELL_DISTRIBUTION_CHANNEL23PowerShell で収集されるテレメトリ情報~省略~
PROCESSOR_ARCHITECTURE24プロセッサーアーキテクチャAMDやx86
PROCESSOR_IDENTIFIER25プロセッサーについての説明~省略~
PROCESSOR_LEVEL26プロセッサーのモデル番号~省略~
PROCESSOR_REVISION27プロセッサーのリビジョン番号~省略~
ProgramData28ProgramDataC:\ProgramData
ProgramFiles29Program FilesC:\Program Files
ProgramFiles(x86)30Program Files (x86)C:\Program Files (x86)
ProgramW643231Program FilesC:\Program Files
PSModulePath32PowerShell で利用するモジュールパス(;区切り)~省略~
PUBLIC33パブリックディレクトリーパスC:\Users\Public
SESSIONNAME34セッション名~省略~
SystemDrive35システムのドライブレターC:
SystemRoot36システムのルートディレクトリC:\WINDOWS
TEMP37AppData\Local\TempフォルダC:\Users\<ユーザ名>\AppData\Local\Temp
TMP38AppData\Local\TempフォルダC:\Users\<ユーザ名>\AppData\Local\Temp
USERDOMAIN39ログオン中のドメイン名~省略~
USERDOMAIN_ROAMINGPROFILE40移動ユーザープロファイルのドメイン名~省略~
USERNAME41ログオンしているユーザーの名前<ユーザ名>
USERPROFILE42ユーザプロファイルC:\Users\<ユーザ名>
windir43Windows OSインストールディレクトリ~省略~

FSOによる特殊フォルダ指定

 FSO(FileSystemObject)のGetSpecialFolderメソッドによる特殊フォルダの指定方法を紹介します。引数は、Index(数値)か、パラメータ(文字列)を指定します。

クラス指定

事前バインディング(VBEの参照設定)

Microsoft Scripting Runtime

実行時バインディング(CreateObjectセット)

CreateObject("Scripting.FileSystemObject")

Example

事前バインディングを利用した場合の特殊フォルダ指定の方法です。

Private Sub 特殊フォルダ_FSO事前バインディング()
    'VBEの参照設定で、事前に「Microsoft Scripting Runtime」を選択
    Dim fso As New FileSystemObject
    Debug.Print fso.GetSpecialFolder(SystemFolder)
    Debug.Print fso.GetSpecialFolder(TemporaryFolder)
    Debug.Print fso.GetSpecialFolder(WindowsFolder)
End Sub

実行時バインディングを利用した場合の特殊フォルダ指定の方法です。

Private Sub 特殊フォルダ_FSO実行時バインディング()
    Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject")
    Debug.Print fso.GetSpecialFolder(0)
    Debug.Print fso.GetSpecialFolder(1)
    Debug.Print fso.GetSpecialFolder(2)
End Sub

パラメータ一覧

パラメータIndex解説ディレクトリーパス
SystemFolder0システムのルートディレクトリC:\Windows
TemporaryFolder1System32フォルダC:\Windows\System32
WindowsFolder2一時ファイルフォルダC:\Users\<ユーザ名>\AppData\Local\Temp
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次