メインコンテンツへスキップ
【VBA】Shell関数を使用してフォルダを開く

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

·2 分
Programming VBA
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

VBAではShell関数を使用することで、外部のプログラムやコマンドを実行することができます。

Shell関数からエクスプローラーを呼び出してフォルダを開いてみます。

Shell関数でフォルダを開く
#

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

Option Explicit
Sub OpenFolder(path As String)
'###################################################################################
'フォルダをエクスプローラーで開く
'-----------------------------------------------------------------------------------
'引数  :path   エクスプローラーで開きたいフォルダパス
'###################################################################################
  Shell "C:\Windows\Explorer.exe " & path, vbNormalFocus

End Sub

Sub TestOpenFolder()

  Call OpenFolder("C:\")

End Sub

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

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

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

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

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

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

VBAで参照設定を行う
·1 分
Programming VBA

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

C:\test
├─test1
│  ├─test1-1
│  └─test1-2
└─test2
    ├─test2-1
    └─test2-2
大量のフォルダをShell関数で開くと、画面がエクスプローラーで埋め尽くされてしまうので、 事前にフォルダ数を確認してください。

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

Option Explicit
Sub OpenSubFolders(path)

    Dim fso As New FileSystemObject
    Dim subFolder As Folder

    For Each subFolder In fso.GetFolder(path).SubFolders
      Shell "C:\Windows\Explorer.exe " & subFolder.path, vbNormalFocus
      Call OpenSubFolders(subFolder.path)
    Next

    Set fso = Nothing
    Set subFolder = Nothing

End Sub

Sub TestOpenSubFolders()

  Call OpenSubFolders("C:\test")

End Sub

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

関連記事

【VBA】フォルダを操作する
·3 分
Programming VBA
VBAでファイルパスを取得する
··3 分
Programming VBA
【VBA】最終行と最終列を取得する
··3 分
Programming VBA