VBAで自動化をしていると、次のようなことはありませんか?
- メモ帳やChromeを起動したい
- バッチファイルを実行したい
- 外部プログラムを自動起動したい
このような場合は、Shell関数を使うことで解決できます。
WindowsのアプリやコマンドをVBAから実行できる非常に便利な関数です。
この記事では、Shell関数の基本から実務で使える応用方法まで分かりやすく解説します。
この記事でできること
- アプリを起動できる
- コマンドを実行できる
- バッチファイルを実行できる
- 外部ツール連携ができる
Shell関数とは?
Shell関数は、Windowsのプログラムやコマンドを実行する関数です。
例えば:
- メモ帳起動
- Chrome起動
- cmdコマンド実行
- バッチファイル実行
などが可能です。
基本:Shell関数の使い方
基本構文はこちらです。
Shell(実行コマンド, ウィンドウ表示形式)
基本例:メモ帳を起動する
Shell "notepad.exe", vbNormalFocus
メモ帳が起動します。
Chromeを起動する
Shell "C:\Program Files\Google\Chrome\Application\chrome.exe", vbNormalFocus
バッチファイルを実行する
Shell "C:\test\sample.bat", vbNormalFocus
コマンドプロンプトを実行する
Shell "cmd.exe /c dir", vbNormalFocus
dirコマンドを実行します。
PowerShellを実行する
Shell "powershell.exe", vbNormalFocus
URLを開く
ブラウザでWebページを開けます。
Shell "cmd /c start https://www.google.com", vbHide
Shell関数の戻り値
戻り値はタスクIDです。
Dim taskID As Long
taskID = Shell("notepad.exe", vbNormalFocus)
MsgBox taskID
ウィンドウ表示形式一覧
| 定数 | 内容 |
|---|---|
| vbHide | 非表示 |
| vbNormalFocus | 通常表示 |
| vbMinimizedFocus | 最小化表示 |
| vbMaximizedFocus | 最大化表示 |
実務での活用例
- 外部システム起動
- バッチ自動実行
- ファイル自動オープン
- ブラウザ起動
システム連携で非常によく使われます。
注意点
① パスに空白がある場合
ダブルクォーテーションで囲みます。
Shell """C:\Program Files\App\app.exe""", vbNormalFocus
② 実行ファイルが存在しない
エラーになるためパス確認が必要です。
③ Shellは非同期処理
起動後すぐ次の処理へ進みます。
完了待ちしたい場合は別処理が必要です。
安全な書き方(おすすめ)
Dim appPath As String
appPath = "notepad.exe"
If Dir(appPath) <> "" Then
Shell appPath, vbNormalFocus
Else
MsgBox "ファイルが存在しません"
End If
よくあるエラーと対処法
① ファイルが見つかりません
パスが正しいか確認してください。
② 起動しない
管理者権限が必要な場合があります。
③ パスに空白がある
ダブルクォーテーションで囲ってください。
④ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- Shellは外部プログラムを実行する関数
- アプリ起動やバッチ実行で活躍
- システム連携で非常に便利
- 実務では使用頻度が高い
Shell関数を使いこなせるようになると、ExcelVBAの自動化レベルが大きく向上します。
特に実務自動化では非常に強力なので、ぜひマスターしておきましょう。

コメント