【Excel VBA】特殊フォルダのパスを取得する(SpecialFolders)

はじめに

今回は、特殊フォルダのパスを取得する方法について解説します。
「デスクトップ」や「マイドキュメント」など、Windowsには標準で作成されているフォルダがあり、端末や環境によりパスが異なります。
これらのパスを取得する方法について、具体的に解説します。

この記事を読むメリット
  • 特殊フォルダ(デスクトップやマイドキュメントなど)のパスの取得方法が分かります。
  • コピペで使える実践的なサンプルコードを掲載します。

前提

特殊フォルダとは

Windowsに標準で作成されているフォルダのことです。
「デスクトップ」や「ドキュメント」などが対象となります。

これらは、端末やログインユーザによってパスが異なるため、本記事で紹介する「SpecialFolder」プロパティで取得するのをお勧めします。

特殊フォルダーのイメージ
特殊フォルダーのイメージ

基本情報

SpecialFoldersプロパティ

「デスクトップ」や「ドキュメント」などの特殊フォルダのパスを取得するには、WSHShellオブジェクトのSpecialFoldersプロパティを使用します。

構文

構文を以下に示します。引数のキーワードは、取得したいフォルダ毎に決まったキーワードを指定します。

構文

WSHShellオブジェクト.SpecialFolders(キーワード)

キーワード

#キーワード特殊フォルダ
1AllUsersDesktopユーザ共通のデスクトップ
2AllUsersStartMenuユーザ共通のスタートメニュー
3AllUsersProgramsユーザ共通のプログラムメニュー
4AllUsersStartupユーザ共通のスタートアップ
5Desktopログインユーザのデスクトップ
6Favoritesログインユーザのお気に入り
7MyDocumentsログインユーザのドキュメント
8AppDataログインユーザのアプリ用フォルダ
9NetHoodログインユーザの共有フォルダー履歴
10PrintHoodログインユーザのプリンタ
11Programsログインユーザのプログラムメニュー
12Recentログインユーザの最近使った項目
13SendToログインユーザの送る
14StartMenuログインユーザのスタートメニュー
15Startupログインユーザのスタートアップ
16Templatesログインユーザのテンプレート
17Fontsフォント
キーワードと特殊フォルダ
りゅう

「ダウンロード」や「ピクチャ」などは取得できませんが、基本的には「デスクトップ」と同様のフォルダに存在します。

サンプルコード

特殊フォルダのパスを取得する

サンプルコード
Public Sub getSpecialFolderPath()
    Dim myWSHShell As Object    ' WSHShellオブジェクト

    ' WSHShellオブジェクトを生成
    Set myWSHShell = CreateObject("WScript.Shell")

    Range("C2").Value = myWSHShell.SpecialFolders("AllUsersDesktop")
    Range("C3").Value = myWSHShell.SpecialFolders("AllUsersStartMenu")
    Range("C4").Value = myWSHShell.SpecialFolders("AllUsersPrograms")
    Range("C5").Value = myWSHShell.SpecialFolders("AllUsersStartup")
    Range("C6").Value = myWSHShell.SpecialFolders("Desktop")
    Range("C7").Value = myWSHShell.SpecialFolders("Favorites")
    Range("C8").Value = myWSHShell.SpecialFolders("MyDocuments")
    Range("C9").Value = myWSHShell.SpecialFolders("AppData")
    Range("C10").Value = myWSHShell.SpecialFolders("NetHood")
    Range("C11").Value = myWSHShell.SpecialFolders("PrintHood")
    Range("C12").Value = myWSHShell.SpecialFolders("Programs")
    Range("C13").Value = myWSHShell.SpecialFolders("Recent")
    Range("C14").Value = myWSHShell.SpecialFolders("SendTo")
    Range("C15").Value = myWSHShell.SpecialFolders("StartMenu")
    Range("C16").Value = myWSHShell.SpecialFolders("Startup")
    Range("C17").Value = myWSHShell.SpecialFolders("Templates")
    Range("C18").Value = myWSHShell.SpecialFolders("Fonts")
End Sub

実行結果 (クリックで拡大します)

プログラム実行前
実行前
プログラム実行後
実行後

マイドキュメントにファイルを保存する

サンプルコード
Public Sub saveDesktop()
    Dim myWSHShell As Object    ' WSHShellオブジェクト
    Dim documentPath As String  ' MyDocumentパス

    ' WSHShellオブジェクトを生成
    Set myWSHShell = CreateObject("WScript.Shell")

    ' マイドキュメントのパスを取得
    documentPath = myWSHShell.SpecialFolders("MyDocuments")

    ' Book1をマイドキュメントに保存する
    Workbooks("Book1").SaveAs documentPath & "\" & "Book1.xlsx"
End Sub

最後に

今回は、特殊フォルダのパスを取得する方法について解説しました。

本記事が、皆さんのお力になれば幸いです!

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

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA