和風スパゲティのレシピ

日本語でコーディングするExcelVBA

デスクトップのフォルダパスを取得する

デスクトップのフォルダパスを取得する方法を解説します。
Windowsの環境変数を取得するEnviron関数を使用するのが簡単です。

Environ関数を利用する方法

ソースコード

Dim Pathデスクトップ As String
Pathデスクトップ = Environ("USERPROFILE") & "\Desktop"
' C:\Users\wfsp\Desktop

Dim Pathドキュメント As String
Pathドキュメント = Environ("USERPROFILE") & "\Documents"
' C:\Users\wfsp\Documents

Dim Pathダウンロード As String
Pathダウンロード = Environ("USERPROFILE") & "\Downloads"
' C:\Users\wfsp\Downloads

解説

Environ関数を使用すると、Windowsの環境変数を取得できます。

[USERPROFILE]を指定するとユーザーのCドライブフォルダを取得できるので、
あとはそこに各フォルダ固有のパスを付与すればOKです。

汎用関数化

この手のコードを暗記したりいちいち調べるのも手間なので、
汎用関数にしてしまいましょう。

Function GetPathUserデスクトップ() As String
    GetPathUserデスクトップ = Environ("USERPROFILE") & "\Desktop"
End Function
Function GetPathUserドキュメント() As String
    GetPathUserドキュメント = Environ("USERPROFILE") & "\Documents"
End Function
Function GetPathUserダウンロード() As String
    GetPathUserダウンロード = Environ("USERPROFILE") & "\Downloads"
End Function

' 使用例
wb出力ブック.SaveAs GetPathUserデスクトップ & "\~~.xlsx"

引数の無い(同PCであれば)常に同じ値を返す関数です。

これを作っておけば、使用例の通りあたかも定数のようにパスを使用できます。
この手の処理をよく行う方は、汎用関数にして持っておきましょう。

WScript.Shellオブジェクトを使用する方法

Environ関数がうまくいかなかった場合の代替案としては、
WScript.Shellオブジェクトを使用する方法もあります。

Dim wshShell As Object
Set wshShell = CreateObject("WScript.Shell")

Dim Pathデスクトップ As String
Pathデスクトップ = wshShell.SpecialFolders("Desktop")
' C:\Users\wfsp\Desktop

Dim Pathドキュメント As String
Pathドキュメント = wshShell.SpecialFolders("MyDocuments")
' C:\Users\wfsp\Documents

この方法はフォルダパスではなくキー名を指定するため、
キーの一覧は以下の表より選択してください。

指定キー 対象フォルダ フォルダパス例
AllUsersDesktop 全ユーザー共通のデスクトップ C:\Users\Public\Desktop
AllUsersStartMenu 全ユーザー共通のプログラムメニュー C:\ProgramData\Microsoft\
Windows\Start Menu
AllUsersPrograms 全ユーザー共通のプログラム C:\ProgramData\Microsoft\
Windows\Start Menu\Programs
AllUsersStartup 全ユーザー共通のスタートアップ C:\ProgramData\Microsoft\
Windows\Start Menu\Programs\StartUp
Desktop デスクトップ C:\Users\wfsp\Desktop
AppData AppData\Roamingフォルダ C:\Users\wfsp\AppData\Roaming
PrintHood プリンタショートカットフォルダ C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Printer Shortcuts
Templates Templatesフォルダ C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Templates
Fonts フォントフォルダ C:\Windows\Fonts
NetHood Network Shortcutsフォルダ C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Network Shortcuts
Desktop デスクトップ C:\Users\wfsp\Desktop
StartMenu スタートメニュー C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Start Menu
SendTo SendToフォルダ C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\SendTo
Recent 最近使った項目 C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Recent
Startup スタートアップフォルダ C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Start Menu\Programs\Startup
Favorites お気に入り C:\Users\wfsp\Favorites
MyDocuments マイドキュメント C:\Users\wfsp\Documents
Programs プログラムメニュー C:\Users\wfsp\AppData\Roaming\
Microsoft\Windows\Start Menu\Programs


表にない「ダウンロード」「ピクチャ」「ビデオ」などのフォルダは取得できません。

ドキュメントが「MyDocuments」になっていることからもわかる通り、
昔のまま変わっていないオブジェクトのようですね。


Environ関数の方が簡単で、パスの文字列さえあればどんなフォルダも取得できますが、
何らかの理由でうまく動かなかった場合はこちらもお試しください。