「よし!完璧な自動化ツールができたぞ!」
そう意気揚々と、隣の席の同僚にツールを渡した1分後。
「ごめん、実行したらエラーが出るんだけど…」と言われて、ガッカリしたことはありませんか?
原因の9割は、これです。
C:\Users\yamada-taro\Desktop\...
コードの中に「自分の名前(ユーザー名)」を直接書いてしまっているんです。これでは、佐藤さんのPCでも、田中さんのPCでも動きません。
そこで今回は、そんな「自分専用ツール」を卒業し、誰のPCでもボタンひとつで快適に動く「汎用性の高いツール」へと変身させる方法をご紹介します。
「WScript.Shell」はOSの情報を教えてくれる優秀なコンシェルジュ
Excel VBAには、「WScript.Shell(ダブル・スクリプト・シェル)」という、Windows(OS)の情報を教えてくれるコンシェルジュのような便利な仕組みが用意されています。
「このPCのデスクトップはどこにある?」と問いかけるだけで、ログインしているユーザー名に応じて、瞬時に正しい場所(パス)を教えてくれます。
ちなみに、このような操作を専門用語では「特殊フォルダの取得」と呼びます。
コピペでOK!パスを自動取得する基本コード
さっそく、そのまま使えるコードを紹介します。
Sub GetSpecialFolderPath()
' --- 1. WScript.Shellを呼び出す ---
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
' --- 2. デスクトップのパスを取得して変数に入れる ---
Dim desktopPath As String
desktopPath = wsh.SpecialFolders("Desktop")
' --- 3. マイドキュメントのパスを取得して変数に入れる ---
Dim documentsPath As String
documentsPath = wsh.SpecialFolders("MyDocuments")
' --- 4. 結果をメッセージボックスで表示(確認用) ---
MsgBox "デスクトップはここです!:" & vbCrLf & desktopPath & vbCrLf & vbCrLf & _
"マイドキュメントはここです!:" & vbCrLf & documentsPath
' --- 5. 後片付け ---
Set wsh = Nothing
End Sub
現場で役立つ実践例:デスクトップへファイルを自動保存する
パスを取得するだけでなく、実際の業務に応用してみましょう。
ここでは「取得したデスクトップのパスへファイルを保存する」コードをご紹介します。
Sub SaveToDesktop()
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
' デスクトップの場所を取得
Dim dPath As String
dPath = wsh.SpecialFolders("Desktop")
' 保存するファイル名を作成(例:売上報告書.xlsx)
Dim fileName As String
fileName = dPath & "\売上報告書.xlsx"
' 今開いているExcelを、その名前で保存する
ActiveWorkbook.SaveAs Filename:=fileName
MsgBox "デスクトップに保存が完了しました!"
Set wsh = Nothing
End Sub
まとめ
実際の業務では、自分が作ったツールを何十人、何百人もの同僚と共有することがよくあります。
その際、「誰のPC環境でもエラーなく動く」コードを書くことは、技術力以上に「使う相手への思いやり」の表れです。
ぜひ今回の方法を取り入れて、より親切で信頼されるツール作りに挑戦してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント