【Excel VBA】デスクトップやドキュメントフォルダのパスを確実に取得する方法

マクロで作成したファイルをユーザーのデスクトップに保存したい、あるいはドキュメントフォルダにあるファイルを読み込みたい、という場面はよくあります。

しかし、これらのフォルダのパスは「C:\Users\Taro\Desktop」のようにユーザー名によって異なり、VBAコード内にパスを直接書き込む(ハードコーディングする)と、他の人のPCでは動作しなくなってしまいます。

この記事では、WScript.Shellオブジェクトを使い、現在のPC環境における特殊フォルダのパスを、誰が実行しても確実に取得するための方法を解説します。


目次

完成したVBAコード

Sub GetSpecialFolderPath()

    ' 変数を宣言します
    Dim wsh As Object
    Dim desktopPath As String
    Dim documentsPath As String
    
    '--- 1. WScript.Shellオブジェクトを生成 ---
    Set wsh = CreateObject("WScript.Shell")
    
    '--- 2. SpecialFoldersプロパティで、各特殊フォルダのパスを取得 ---
    desktopPath = wsh.SpecialFolders("Desktop")
    documentsPath = wsh.SpecialFolders("MyDocuments")
    
    '--- 3. 取得したパスを表示 ---
    MsgBox "現在のPCでのパスは以下の通りです。" & vbCrLf & vbCrLf & _
           "デスクトップ: " & desktopPath & vbCrLf & _
           "ドキュメント: " & documentsPath, vbInformation, "特殊フォルダのパス"
           
    '--- 4. オブジェクトを解放 ---
    Set wsh = Nothing

End Sub

コードのポイント解説

CreateObject("WScript.Shell")

これは、Windowsの様々な機能(シェルの機能)をVBAから操作するための、おまじないのようなものです。この一行で生成されたwshオブジェクトを通じて、OSの情報にアクセスします。

wsh.SpecialFolders("フォルダ名")

これが、特殊フォルダのパスを取得する核心部分です。.SpecialFoldersプロパティに、目的のフォルダを示す特定の文字列を引数として渡すことで、そのフルパスが返されます。

この方法を使えば、PCの環境やWindowsの言語設定(例:「デスクトップ」か「Desktop」か)を意識することなく、常に正しいパスを取得できます。


指定できる主な特殊フォルダ名

SpecialFoldersの引数として指定できる、代表的なフォルダ名は以下の通りです。

引数の文字列対応する特殊フォルダ
Desktopデスクトップ
MyDocumentsドキュメント(マイドキュメント)
Favoritesお気に入り
Startupスタートアップ
Recent最近使ったファイル
SendTo送る
Templatesテンプレート
Fontsフォント

【応用】デスクトップにファイルを保存する

このテクニックを使えば、「現在実行しているユーザーのデスクトップに、ファイルを保存する」といった処理を確実に行えます。

Sub SaveFileToDesktop()
    Dim wsh As Object
    Dim desktopPath As String
    
    Set wsh = CreateObject("WScript.Shell")
    desktopPath = wsh.SpecialFolders("Desktop")
    
    ' デスクトップパスとファイル名を結合して、フルパスを作成
    ThisWorkbook.SaveAs Filename:=desktopPath & "\VBAからの保存テスト.xlsx"
    
    MsgBox "デスクトップにファイルを保存しました。"
    
    Set wsh = Nothing
End Sub

まとめ

ユーザーごとの環境に依存する特殊フォルダのパスを取得する際は、パスを直接コードに書くのではなく、 CreateObject("WScript.Shell").SpecialFolders("フォルダ名") という方法を使いましょう。

これにより、作成したマクロが「自分のPCでしか動かない」といった事態を防ぎ、誰が使っても正しく動作する、汎用性の高いツールを作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次