更新日:、 作成日:

VBA Shell 関数:exe を実行する

はじめに

Excel VBA マクロの Shell 関数から exe を実行する方法を紹介します。

Shell 関数は、.exe ファイルを実行します。

ファイルを開くには、それを実行する .exe にファイルのパスを引数で渡します。

Shell("C:\Windows\System32\notepad.exe D:\tips.txt") なら、メモ帳で D ドライブの tips.txt ファイルを開きます。

フォルダを開くには、エクスプローラーの .exe にフォルダのパスを引数で渡します。

Shell("C:\Windows\explorer.exe D:\tips") なら、エクスプローラーで D ドライブの tips フォルダを開きます。

ファイルやフォルダなどを開きたいときに使用します。

Excel のファイルを開くには「ワークブックを開く」をご覧ください。

Shell 関数の引数と戻り値

Shell(パス)
指定したパスのアプリを開きます。

Shell(パス, 状態)
開いたアプリの起動時の状態を指定できます。

引数「パス」実行したいアプリの絶対パスを指定します。
引数「状態」省略できます。起動時の状態を指定します。
戻り値の型数値型 (Integer)

引数「状態」

名前 状態
vbHide0フォーカスを持ち、非表示の状態
vbNormalFocus1フォーカスを持ち、元のサイズと位置で復元された状態
vbMinimizedFocus (既定)2フォーカスを持ち、最小化された状態
vbMaximizedFocus3フォーカスを持ち、最大化された状態
vbNormalNoFocus4フォーカスを持たず、最後にウィンドウを閉じたときのサイズと位置に復元された状態
vbMinimizedNoFocus6フォーカスを持たず、最小化された状態

解説

引数「パス」には .exe ファイルのパスを指定します。.exe ファイルが存在しないときや、パスが不正なときは「エラー 53 ファイルが見つかりません。」が発生します。

引数「パス」に .txt などのファイルやフォルダのパスを指定すると「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。ファイルやフォルダを開くには、それを実行できる .exe に引数でパスを渡す必要があります。通常は アプリのパス ファイルのパス のように半角スペースで区切って渡します。

引数「パス」に Windows の「Windows 11 実行コマンドの一覧」は使用できますが、「Windows 11 Shell コマンドの一覧」は使用できません。

引数「パス」には環境変数 (%SystemRoot% など) は使用できません。環境変数からパスを取得するには「Environ 関数」を使用します。

引数「状態」の値は VbAppWinStyle 列挙型で定義されています。

.exe が実行されると、それを識別する プロセス ID を返します。

Shell 関数はアプリの起動が完了する前に制御を返します。VBA からそのアプリに対してすぐに操作をすると、失敗する可能性があります。

Excel のファイルを開く

Excel のファイルを開くには Call Workbooks.Open("パス") のように入力して開けます。

詳しくは「ワークブックを開く」をご覧ください。

使用例

Shell 関数の使用例を紹介します。

.exe を実行する

.exe ファイルを実行します。

Dim i As Integer
' メモ帳を起動
i = Shell("C:\Windows\System32\notepad.exe")
i = Shell("C:\Windows\System32\notepad.exe", vbNormalFocus)
i = Shell("C:\Windows\System32\notepad.exe", vbNormalNoFocus)

' 環境変数を使用して起動
' メモ帳のパス "%SystemRoot%\system32\notepad.exe"
Dim s As String
s = Environ("SystemRoot")
i = Shell(s & "\System32\notepad.exe", vbNormalFocus)

' 実行コマンドを使用して起動
i = Shell("notepad", vbNormalFocus)

ファイルを開く

メモ帳でテキストファイルを開きます。

Dim i As Integer
' D:\tips.txt のファイルをメモ帳で開く
i = Shell("C:\Windows\System32\notepad.exe D:\tips.txt", vbNormalFocus)

フォルダを開く

エクスプローラーでフォルダを開きます。

Dim i As Integer
' D:\tips のフォルダをエクスプローラーで開く
i = Shell("C:\Windows\explorer.exe D:\tips", vbNormalFocus)

Excel のファイルを開く

Workbooks.Open メソッドから Excel のファイルを開けます。

Dim wb As Workbook
Set wb = Workbooks.Open("D:\Book1.xlsx")