【VBA】Shell関数を使用してフォルダを開く

VBAではShell関数を使用することで、外部のプログラムやコマンドを実行することができます。
Shell関数からエクスプローラーを呼び出してフォルダを開くことができます。

Shell関数でフォルダを開く

Shell関数を利用してフォルダを開くコードです。

 1Option Explicit
 2Sub OpenFolder(path As String)
 3'###################################################################################
 4'フォルダをエクスプローラーで開く
 5'-----------------------------------------------------------------------------------
 6'引数  :path   エクスプローラーで開きたいフォルダパス
 7'###################################################################################
 8  Shell "C:\Windows\Explorer.exe " & path, vbNormalFocus
 9
10End Sub
11
12Sub TestOpenFolder()
13
14  Call OpenFolder("C:\")
15
16End Sub

TestOpenFolderを実行すると、WindowsのエクスプローラーでCドライブを開きます。

Shell関数の第1引数には、実行するプログラムやコマンドを指定します。
第1引数に "C:\Windows\Explorer.exe""開きたいフォルダのパス" を結合して渡しています。

第2引数には、プログラムを実行するときのウィンドウの状態を指定します。
vbNormalFocusを指定すると、通常の状態で起動します。

OpenFolder関数に渡す文字列を変えることによって、開くフォルダを変えることができます。

サブフォルダも含めて開く

サブフォルダを含めてエクスプローラーでフォルダを開くにはFileSystemObjectを利用します。
FileSystemObjectを利用するにはMicrosoft Scripting Runtimeに参照設定を行う必要があります。

testフォルダ内にフォルダを全部で6つ用意しました。
test1とtest2はそれぞれ、サブフォルダを2つずつ持ちます。
この6つのフォルダをShell関数を利用して、すべて開いてみます。

1C:\test
2├─test1
3│  ├─test1-1
4│  └─test1-2
5└─test2
6    ├─test2-1
7    └─test2-2
Warning

大量のフォルダをShell関数で開くと、画面がエクスプローラーで埋め尽くされてしまうので
事前にフォルダ数を確認してください。

サブフォルダを含めて、すべてのフォルダをエクスプローラーで開くコードです。

 1Option Explicit
 2Sub OpenSubFolders(path)
 3
 4    Dim fso As New FileSystemObject
 5    Dim subFolder As Folder
 6
 7    For Each subFolder In fso.GetFolder(path).SubFolders
 8      Shell "C:\Windows\Explorer.exe " & subFolder.path, vbNormalFocus
 9      Call OpenSubFolders(subFolder.path)
10    Next
11
12    Set fso = Nothing
13    Set subFolder = Nothing
14
15End Sub
16
17Sub TestOpenSubFolders()
18
19  Call OpenSubFolders("C:\test")
20
21End Sub

TestOpenSubFoldersを実行するとサブフォルダを含めて、エクスプローラーでフォルダを開きます。

関連ページ