和風スパゲティのレシピ

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

指定のフォルダをエクスプローラーで開く

指定のフォルダをエクスプローラーで開く方法を紹介します。


Thisworkbook.Pathなどで取得できるフォルダパス
「C:\Users\ユーザー名\Desktop\テストフォルダ」
を利用して、そのフォルダを表示するマクロですね。


これを実行するコードがこちらです。

Sub フォルダをエクスプローラーで開く()

    Dim フォルダパス As String
    フォルダパス = "C:\Users\ユーザー名\Desktop\テストフォルダ"

    Shell "C:\windows\explorer.exe " & フォルダパス & "\", vbNormalFocus

End Sub

エクスプローラーなどの外部のプログラムを実行する際はShell関数を使います。

他の用途では、.txtファイルをメモ帳で開くといったときにも使います。


局所的な使い方しかしないコードですので、
おまじないだと思って使って構いません。


最後の引数「vbNomalFocus」は、開くエクスプローラーを、
「最後に開いたエクスプローラーと同サイズで最前面に」しています。

要するにいつものフォルダを開いたときと同じ挙動ですね。


めったにないと思いますが、
「最大化」したり、「最前面にしないで裏で開く」などをやりたい場合は、
Shell関数 引数でググってください。



注意点として、このコードは「フォルダが存在しないとき」にエラーになりません。

カレントディレクトリ(ドキュメントフォルダなど)が初期値として表示されます。


「フォルダがないときはエクスプローラーを開かない」などを実装する場合は、
フォルダの存在を調べるDir関数を使って、

If Dir(フォルダパス, vbDirectory) <> "" Then
    Shell "C:\windows\explorer.exe " & フォルダパス & "\", vbNormalFocus
Else
    MsgBox "指定のフォルダは存在しません。"
End If

このように組んでください。


前述の通り使い道がかなり限られたコードです。

このコードを覚えても他に使い道があまりありませんので、
このような汎用関数にしてしまうと良いです。

Function フォルダをエクスプローラーで開く(指定フォルダパス As String) As Boolean

    If Dir(指定フォルダパス, vbDirectory) = "" Then Exit Function

    Shell "C:\windows\explorer.exe " & 指定フォルダパス & "\", vbNormalFocus
    フォルダをエクスプローラーで開く = True
    
End Function

 

こうしておけば、例えば自分自身の保存フォルダを開くときは、

Call フォルダをエクスプローラーで開く(Thisworkbook.Path)

で済むようになりますので、もう二度と関数の中身を見なくてよくなります。

Shell関数という存在も記憶から消してOK。


この手の関数は結果の成否を返り値で判定できるようにしておくことで、
MsgBoxが欲しいとき/いらない時のどっちにも使えます。

If フォルダをエクスプローラーで開く = False Then
    MsgBox "フォルダが存在しません。"
End If


以上で「フォルダをエクスプローラーで開く」コードの解説を終わります。


なお、ただエクスプローラーを開くだけでなく、エクスプローラー(正確にはダイアログボックス)を開いてユーザーにフォルダを選択してもらい、ユーザーからフォルダのパスを受け取るコードはこちらの記事を参考ください。

www.limecode.jp


本記事のコードは「フォルダを開く」だけのコードです。

  • たくさんのブックを生成するマクロの完了時に、ブックを作ったフォルダを表示してユーザーに見せる。
  • 「フォルダを開く」ボタンをシートに設置する。

などにお使いください。


また、「フォルダを開く」ボタンをシートに設置するのであれば、
ハイパーリンクを使った方が楽なことも多いです。

この方法もあるということは覚えておいてください。