【PR】を含みます。

プログラミング

【VBA】デスクトップのパスを取得する方法|WshShellとEnvironの違いも解説

VBA デスクトップのパスを取得する方法 WshShellとEnvironの違いも解説

VBAでファイルを保存したり、デスクトップ上のファイルを操作したりするときに、デスクトップのパスを取得したい場面はよくあります。

しかし、取得方法はいくつかあり、「どの方法を使えばいいのか分からない」と迷う方も多いのではないでしょうか。

本記事では、VBAでデスクトップのパスを取得する2つの方法を紹介しながら、それぞれの違いや注意点も分かりやすく解説します。

結論:VBAでデスクトップのパスを取得するならWshShellがおすすめ

先に結論を書くと、実務で使うならWshShellオブジェクトのSpecialFoldersを使う方法がおすすめです。

Environ関数を使う方法はシンプルですが、環境によっては実際のデスクトップの場所とずれる場合があります。

結論
  • 正確性を重視するならWScript.ShellのSpecialFolders('Desktop')
  • 手軽さを重視するならEnviron('USERPROFILE') & '\Desktop'
  • ファイル保存先として使うなら、基本はWshShellの方法がおすすめ

VBAでデスクトップのパスを取得する2つの方法

VBAでデスクトップのパスを取得する方法は、主に次の2つです。

方法特徴おすすめ度
WshShellオブジェクトWindowsの特殊フォルダ情報から取得できる◎
Environ関数ユーザープロファイルをもとにパスを組み立てる○

まずは、もっともおすすめのWshShellオブジェクトを使う方法から見ていきましょう。

【おすすめ】WshShellオブジェクトでデスクトップのパスを取得する方法

WshShellオブジェクトのSpecialFoldersを使うと、デスクトップのパスを比較的安全に取得できます。

保存先やファイル操作に使いたい場合は、こちらの方法を選ぶのがおすすめです。

Copyをクリックするとコピーできます。

VBA
Copy
Sub sample()
    Dim wsh As Object
    Dim desktopPath As String
    Set wsh = CreateObject("WScript.Shell")
    desktopPath = wsh.SpecialFolders("Desktop")
    MsgBox desktopPath
    Set wsh = Nothing
End Sub

この方法のメリット

  • デスクトップの場所を直接取得しやすい
  • ファイル保存先として使いやすい
  • 実務でも扱いやすい

この方法のデメリット

  • オブジェクトを作成する必要がある
  • Environ関数より少しだけ記述量が多い

【簡単】Environ関数でデスクトップのパスを取得する方法

もっと手軽に書きたい場合は、Environ関数を使う方法もあります。

USERPROFILEからユーザーフォルダのパスを取得し、その後ろに\Desktopを連結するだけです。

Copyをクリックするとコピーできます。

VBA
Copy
Sub sample()
    Dim desktopPath As String
    desktopPath = Environ("USERPROFILE") & "\Desktop"
    MsgBox desktopPath
End Sub

この方法のメリット

  • コードが短くて分かりやすい
  • 初心者でも理解しやすい
  • 簡単な確認用途なら使いやすい

この方法のデメリット

  • 環境によっては実際のデスクトップの場所と一致しないことがある
  • 保存先として使う場合は注意が必要

Environ("USERPROFILE") & "\Desktop"は、ユーザーフォルダ配下にデスクトップがある前提でパスを組み立てています。

そのため、環境によっては実際のデスクトップの場所と一致しないことがあります。

これは、Windowsの設定やOneDriveの既知フォルダー移動によって、デスクトップの実際の保存場所が変更されることがあるためです。

たとえば、OneDriveを利用していてデスクトップの保存場所が変更されている場合などは、想定通りに動かないことがあります。

そのため、実際にファイルを保存する処理に使う場合は、WshShellオブジェクトの方法を優先するのがおすすめです。

WshShellとEnvironの違い

2つの方法の違いを表でまとめると、次の通りです。

比較項目WshShellEnviron
コードの短さ○◎
正確性◎△
初心者の分かりやすさ○◎
実務での使いやすさ◎○

「とりあえずデスクトップの位置を知りたい」というだけならEnviron関数でも十分です。

一方で、ファイル保存や運用を考えるなら、WshShellオブジェクトの方法を選んでおくと安心です。

取得したデスクトップパスを使ってファイルを保存する例

取得したパスは、実際にファイルを保存する処理にも活用できます。

たとえば、現在のブックをデスクトップに保存する場合は次のように書けます。

Copyをクリックするとコピーできます。

VBA
Copy
Sub saveToDesktop()
    Dim wsh As Object
    Dim desktopPath As String
    Dim savePath As String
    Set wsh = CreateObject("WScript.Shell")
    desktopPath = wsh.SpecialFolders("Desktop")
    savePath = desktopPath & "\sample.xlsm"
    ThisWorkbook.SaveAs savePath
    Set wsh = Nothing
End Sub

VBAでデスクトップパスを取得するときの注意点

OneDriveを使っている環境では注意

PCの設定によっては、デスクトップがローカルではなくOneDrive配下に移動していることがあります。

この場合、単純にUSERPROFILE\Desktopを組み立てる方法では、実際の保存先と一致しないことがあります。

Windows向けの方法である点にも注意

今回紹介している方法は、基本的にWindows環境で使うことを想定しています。

Mac版Excel VBAでは考慮すべき点が異なるため、同じコードがそのまま使えない場合があります。

保存前に存在確認をしておくと安心

ファイル保存処理に使う場合は、取得したパスが本当に存在するか確認してから処理を進めると、トラブルを防ぎやすくなります。

VBAでファイルやフォルダの存在確認をする方法は以下の記事で紹介しています。

あわせて読む
VBA ファイル・フォルダの存在確認をする方法 Dir関数とFileSystemObjectの使い分け

【VBA】ファイル・フォルダの存在確認をする方法|Dir関数とFileSystemObjectの使い分け

VBAでファイルを開いたり保存したりするときは、あらかじめファイルやフォルダが存在するか確認しておくと安心です。 存在しないパスをそのまま使ってしまうと、実行時エラーの原因になることがあります。 VB ...

よくある質問

デスクトップのパスはどちらの方法で取得すべきですか?

実務で使うならWshShellオブジェクトの方法がおすすめです。

より安全に取得しやすく、保存先としても使いやすいためです。

Environ関数は使わないほうがよいですか?

使ってはいけないわけではありません。

簡単に書けるので、学習用や簡易的な用途には便利です。

ただし、環境によっては実際のデスクトップの場所とずれる場合があります。

取得したパスはそのまま保存処理に使えますか?

使えます。

ただし、実際に保存処理へ使うならWshShellの方法を選ぶほうが安心です。

まとめ

今回は、VBAでデスクトップのパスを取得する2つの方法を紹介しました。

それぞれの特徴をまとめると、次の通りです。

  • 正確性を重視するならWshShellオブジェクト
  • 簡潔さを重視するならEnviron関数
  • 保存先に使うならWshShellの方法がおすすめ

特に、実務でファイル保存やファイル操作に使う場合は、環境差異の影響を受けにくい方法を選ぶことが大切です。

ぜひ用途に合わせて使い分けてみてください。

この記事を書いた人
もみじのアイコン画像

もみじ

現役フリーランスWebエンジニア。フロントエンド開発を中心に、Web制作、WordPress、業務効率化ツール開発、PHPを用いた機能改修に携わってきました。社内SEとして業務ツール開発や運用保守を担当した経験もあります。

実務や学習を通じて得た知見をもとに、初心者がつまずきやすいポイントや、現場で役立つ考え方をわかりやすく発信しています。

詳しいプロフィールはこちら

-プログラミング
-, ,