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:AppData | 26 | Roaming | C:\Users\<ユーザー名>\AppData\Roaming |
shell:UserProgramFiles | Local\Programs | C:\Users\<ユーザー名>\AppData\Local\Programs | |
shell:Local AppData | 28 | Local | C:\Users\<ユーザー名>\AppData\Local |
shell:Cookies | 33 | INetCookies | C:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows\INetCookies |
shell:Profile | 40 | ユーザ名 | C:\Users\<ユーザー名> |
shell:Startup | 29 | Startup | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
shell:Cache | 32 | INetCache | C:\Users\<ユーザー名>\AppData\Local\Microsoft\Windows\INetCache |
shell:My Music | 13 | マイミュージック | C:\Users\<ユーザ名>\Music |
shell:My Pictures | 39 | マイピクチャー | C:\Users\<ユーザ名>\Pictures |
shell:My Video | 14 | マイビデオ | C:\Users\<ユーザ名>\Videos |
shell:Downloads | ダウンロード | C:\Users\<ユーザ名>\Downloads | |
shell:Personal | 5 | マイドキュメント | C:\Users\<ユーザ名>\Documents |
shell:Desktop | 0 | デスクトップ | C:\Users\<ユーザ名>\Desktop |
shell:RecycleBinFolder | 10 | ごみ箱 | ::{645FF040-5081-101B-9F08-00AA002F954E} |
shell:OneDrive | OneDrive |
多くのサイトで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 | フォルダ名 | ディレクトリーパス |
---|---|---|---|
AllUsersDesktop | 0 | 全ユーザー共通のデスクトップ | C:\Users\Public\Desktop |
AllUsersStartMenu | 1 | 全ユーザー共通のプログラムメニュー | C:\ProgramData\Microsoft\Windows\Start Menu |
AllUsersPrograms | 2 | 全ユーザー共通のプログラム | C:\ProgramData\Microsoft\Windows\Start Menu\Programs |
AllUsersStartup | 3 | 全ユーザー共通のスタートアップ | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp |
Desktop | 4 | デスクトップ | C:\Users\<ユーザー名>\Desktop |
AppData | 5 | AppData\Roamingフォルダ | C:\Users\<ユーザー名>\AppData\Roaming |
PrintHood | 6 | プリンタショートカットフォルダ | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
Templates | 7 | Templatesフォルダ | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Templates |
Fonts | 8 | フォントフォルダ | C:\Windows\Fonts |
NetHood | 9 | Network Shortcutsフォルダ | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
Desktop | 10 | デスクトップ | C:\Users\<ユーザー名>\Desktop |
StartMenu | 11 | スタートメニュー | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu |
SendTo | 12 | SendToフォルダ | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\SendTo |
Recent | 13 | 最近使った項目 | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Recent |
Startup | 14 | スタートアップフォルダ | C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
Favorites | 15 | お気に入り | C:\Users\<ユーザー名>\Favorites |
MyDocuments | 16 | マイドキュメント | C:\Users\<ユーザー名>\Documents |
Programs | 17 | プログラムメニュー | 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 | 解説 | ディレクトリーパス |
---|---|---|---|
ALLUSERSPROFILE | 1 | All Usersのプロファイルパス | C:\ProgramData |
APPDATA | 2 | AppData\Roamingフォルダ | C:\Users\<ユーザ名>\AppData\Roaming |
CommonProgramFiles | 3 | プログラムファイル用の共通ディレクトリ | C:\Program Files\Common Files |
CommonProgramFiles(x86) | 4 | プログラムファイル(x86)用の共通ディレクトリ | C:\Program Files (x86)\Common Files |
CommonProgramW6432 | 5 | プログラムファイル用の共通ディレクトリ | C:\Program Files\Common Files |
COMPUTERNAME | 6 | コンピュータ名 | コンピュータ名等 |
ComSpec | 7 | cmd.exe(コマンドプロンプト)のフルパス | C:\WINDOWS\system32\cmd.exe |
DriverData | 8 | フォルダ | C:\Windows\System32\Drivers\DriverData |
~省略~ | 9 | 1 | |
FPS_BROWSER_APP_PROFILE_STRING | 10 | ブラウザアプリ名(Internet Explorer) | Internet Explorer |
FPS_BROWSER_USER_PROFILE_STRING | 11 | ブラウザユーザ名 | Default |
HOMEDRIVE | 12 | ホームドライブ | C: |
HOMEPATH | 13 | ユーザーのホームディレクトリパス | \Users\<ユーザ名> |
LOCALAPPDATA | 14 | AppData\Localフォルダ | C:\Users\<ユーザ名>\AppData\Local |
LOGONSERVER | 15 | ログオン中のサーバ名前 | コンピュータ名等 |
NUMBER_OF_PROCESSORS | 16 | PCのプロセッサー数 | ~省略~ |
OneDrive | 17 | OneDrive for Businessのパス名 | C:\Users\<ユーザ名>\OneDrive |
OneDriveCommercial | 18 | OneDrive for Businessのパス名 | C:\Users\<ユーザ名>\OneDrive |
OneDriveConsumer | 19 | 個人用OneDriveのパス名 | C:\Users\<ユーザ名>\OneDrive |
OS | 20 | OS名 | Windows_NT等 |
Path | 21 | 環境変数Pathに設定されているパスの一覧(;区切り) | ~省略~ |
PATHEXT | 22 | 拡張子なしで実行できるファイルの一覧(;区切り) | ~省略~ |
POWERSHELL_DISTRIBUTION_CHANNEL | 23 | PowerShell で収集されるテレメトリ情報 | ~省略~ |
PROCESSOR_ARCHITECTURE | 24 | プロセッサーアーキテクチャ | AMDやx86 |
PROCESSOR_IDENTIFIER | 25 | プロセッサーについての説明 | ~省略~ |
PROCESSOR_LEVEL | 26 | プロセッサーのモデル番号 | ~省略~ |
PROCESSOR_REVISION | 27 | プロセッサーのリビジョン番号 | ~省略~ |
ProgramData | 28 | ProgramData | C:\ProgramData |
ProgramFiles | 29 | Program Files | C:\Program Files |
ProgramFiles(x86) | 30 | Program Files (x86) | C:\Program Files (x86) |
ProgramW6432 | 31 | Program Files | C:\Program Files |
PSModulePath | 32 | PowerShell で利用するモジュールパス(;区切り) | ~省略~ |
PUBLIC | 33 | パブリックディレクトリーパス | C:\Users\Public |
SESSIONNAME | 34 | セッション名 | ~省略~ |
SystemDrive | 35 | システムのドライブレター | C: |
SystemRoot | 36 | システムのルートディレクトリ | C:\WINDOWS |
TEMP | 37 | AppData\Local\Tempフォルダ | C:\Users\<ユーザ名>\AppData\Local\Temp |
TMP | 38 | AppData\Local\Tempフォルダ | C:\Users\<ユーザ名>\AppData\Local\Temp |
USERDOMAIN | 39 | ログオン中のドメイン名 | ~省略~ |
USERDOMAIN_ROAMINGPROFILE | 40 | 移動ユーザープロファイルのドメイン名 | ~省略~ |
USERNAME | 41 | ログオンしているユーザーの名前 | <ユーザ名> |
USERPROFILE | 42 | ユーザプロファイル | C:\Users\<ユーザ名> |
windir | 43 | Windows 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 | 解説 | ディレクトリーパス |
---|---|---|---|
SystemFolder | 0 | システムのルートディレクトリ | C:\Windows |
TemporaryFolder | 1 | System32フォルダ | C:\Windows\System32 |
WindowsFolder | 2 | 一時ファイルフォルダ | C:\Users\<ユーザ名>\AppData\Local\Temp |