はじめに
VBAマクロの処理の流れの中で、「メモ帳を開いてログを書き出したい」「ブラウザを開いて特定のURLにアクセスさせたい」といったように、Excel以外の外部アプリケーションを起動したい場面があります。
VBAの Shell
関数を使えば、このような外部プログラムの実行を簡単に行うことができます。この記事では、Shell
関数の基本的な使い方を、2つのパターンに分けて解説します。
Shell
関数の基本的な使い方
Shell
関数は、指定したプログラムを実行し、成功すればそのプログラムのタスクID(識別番号)を、失敗すれば0を返します。
基本構文: Shell(PathName As String, [WindowStyle As VbAppWinStyle = vbMinimizedFocus])
PathName
: 実行したいプログラムのパスとファイル名を文字列で指定します。WindowStyle
: プログラムをどのように表示するかを指定する定数です(後述)。
1. プログラム名を直接指定して起動する
電卓(calc.exe
)やメモ帳(notepad.exe
)のように、Windowsの環境変数 Path
が通っている一般的なプログラムは、ファイル名だけで起動できます。
サンプルコード
' メモ帳を通常のウィンドウサイズで起動する
Sub LaunchNotepad()
Dim taskID As Variant
' Shell関数で "notepad.exe" を実行
' 第2引数 vbNormalFocus で、通常のウィンドウでフォーカスを当てて開く
taskID = Shell("notepad.exe", vbNormalFocus)
' 実行に成功したかチェック
If IsError(taskID) Then
MsgBox "メモ帳の起動に失敗しました。"
Else
Debug.Print "メモ帳がタスクID: " & taskID & " で起動しました。"
End If
End Sub
2. フルパスを指定して起動する
Microsoft EdgeやGoogle Chromeといった、パスが通っていない特定のアプリケーションを起動する場合は、その実行ファイルのフルパスを正確に指定する必要があります。
サンプルコード
' Microsoft Edgeを起動する
Sub LaunchWebApp()
Dim appPath As String
Dim taskID As Variant
' 実行ファイルのフルパスを文字列変数に格納
appPath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
' ファイルが存在するか確認
If Dir(appPath) = "" Then
MsgBox "指定されたアプリケーションが見つかりません。", vbCritical
Exit Sub
End If
' フルパスを指定してShell関数を実行
taskID = Shell(appPath, vbNormalFocus)
If IsError(taskID) Then
MsgBox "アプリケーションの起動に失敗しました。"
End If
End Sub
注意: アプリケーションのインストール場所は環境によって異なる場合があります。Dir
関数でファイルの存在を確認してから実行するのが安全です。
WindowStyle
引数について
Shell
関数の第2引数では、起動するアプリケーションのウィンドウの表示スタイルを指定できます。
定数 | 説明 |
vbNormalFocus | 通常のウィンドウサイズで、フォーカスを当てて表示。(デフォルト) |
vbMinimizedFocus | 最小化した状態で、フォーカスを当てて表示。 |
vbMaximizedFocus | 最大化した状態で、フォーカスを当てて表示。 |
vbHide | ウィンドウを非表示にして実行。 |
vbNormalNoFocus | 通常のウィンドウサイズで、フォーカスは当てずに(現在のウィンドウに残したまま)表示。 |
まとめ
今回は、VBAの Shell
関数を使って外部のアプリケーションを起動する方法を解説しました。
- メモ帳などの一般的なツールは、ファイル名だけで起動できる。
- 特定のアプリケーションは、実行ファイルのフルパスを指定する必要がある。
- 第2引数で、ウィンドウの表示スタイル(最大化、最小化など)を制御できる。
この関数を使えば、マクロから他のツールを呼び出して連携させるなど、VBAの活用の幅をさらに広げることができます。