OpenURL|指定したURLを既定のブラウザで起動する

この部品でできること
OpenURL は、引数に渡した文字列のURLを、そのPCで設定されている既定のブラウザで開くExcel VBAの汎用プロシージャです。
引数にURL文字列を渡すだけで、既定のブラウザが起動しそのページが開く
WScript.Shell オブジェクトの .Run メソッドを使った、数行で完結するシンプルな実装
依存する自作関数はなく、コードをそのまま貼り付ければ動作する
使いどころ
ボタンを押したら参考ページや自社サイトを開く、といった案内用のボタンを作りたいとき
Excelブックから、対応するWebアプリやクラウドサービスのページを開きたいとき
セルに入力されたURLを、そのままワンクリックで開けるようにしたいとき
コード
コード中のコメントにある参考ページは、officetanaka.net の Tips「他のプログラムを実行する」です。WScript.Shell の .Run メソッドで外部プログラムやURLを起動する方法が紹介されており、この記事の OpenURL は、その内容をもとに「引数にURLを渡すだけで既定ブラウザを開く」用途に絞ってすぐ使える形にまとめた汎用プロシージャです。
使い方・引数
引数は1つだけです。
URL(String)・・・起動したいページのURL文字列(例 "https://www.softex-celware.com/")
呼び出し例は次のとおりです。シート上のセルにURLを入力しておき、そのセルの値を OpenURL に渡す形が扱いやすい使い方です。
実際に使用すると、下記の様にシート上のボタンを押すだけで、セルに入力したURLが既定のブラウザで開きます。

依存プロシージャ
このコードは自作の依存プロシージャを持たない、自己完結した部品です。上のコードブロックをそのまま標準モジュールに貼り付ければ動作します。
応用・注意点
WScript.Shell の .Run メソッドには、本来は次のような第2引数(ウィンドウ表示モード)を指定する機能があります。
0:非表示
1:通常表示・アクティブ
3:最大化表示・アクティブ
6:最小化表示
10:Windows側の既定の表示方法
この値は、Windows APIの ShowWindow 関数が受け取る nCmdShow パラメータと同じ体系です。詳細な値の一覧や定義は、Microsoft公式ドキュメントのShowWindow function (winuser.h) - Win32 apps | Microsoft Learnを参照してください。
例えば Call WSH.Run("notepad.exe", 3) のようにメモ帳を起動する場合は、この第2引数どおりに最大化されて起動します。
ところが OpenURL では、コード中のコメントのとおり、この第2引数をあえて指定していません。理由は、URLを既定のブラウザで開く用途では、この表示モードの指定がブラウザの表示状態に反映されないことがあるためです。
これは、WSH.Run(URL, 3) としてもChromeそのものを直接起動しているわけではなく、実際には次のような流れになるためです。
Excel VBA → WScript.Shell.Run(URL) → Windowsが「このURLを開く既定アプリは何か」を判定 → 既定ブラウザ(Chrome / Edgeなど)が起動
つまり第2引数の表示モードは、最終的に表示されるブラウザウィンドウを直接制御しているのではなく、あくまでWindowsの起動処理に対して表示状態の希望を渡しているだけです。特にGoogle ChromeやMicrosoft EdgeのようなChromium系ブラウザでは、すでに起動しているプロセスへURLを渡して既存プロセス側が新しいタブやウィンドウを作る、という動作になることがあり、この場合は表示モードを受け取ったプロセスと、実際にウィンドウを作成するプロセスが一致しないため、指定が反映されません。ブラウザのウィンドウをすべて閉じていても、裏でプロセスが残っている場合に同じ現象が起きることもあります。
第2引数の機能自体が無効というわけではなく、メモ帳のような単純に起動して1つのウィンドウを作るアプリケーションでは問題なく効きます。あくまで「URLをブラウザで開く」という起動経路特有の事情によって反映されないことがある、という点に注意してください。
もし「Chromeを必ず最大化で開きたい」「新しいウィンドウとして開きたい」といった要件がある場合は、OpenURL に機能を詰め込むのではなく、chrome.exe --start-maximized のような起動オプションを使ったChrome専用の別プロシージャとして分けるのがおすすめです。OpenURL は「既定ブラウザでURLを開くことだけを担当する」汎用部品として、表示状態はブラウザ側に任せる形にしておくと、役割がシンプルなまま長く使い回せます。
サンプルブック(ダウンロードして試せます)
コードの詳しい動きは上のコードブロックと解説のとおりですが、まず動かして試したい場合は、下記のサンプルブックをダウンロードして、セルにURLを入力しボタンを押すだけで動作を確認できます。
まとめ
OpenURL は、引数に渡したURLを既定のブラウザで開くだけの、非常にシンプルな汎用プロシージャです。あえて表示モードを指定しないことで、Chrome・Edgeを含むどのブラウザ環境でも安定して動く汎用部品になっています。案内用のボタンやWebアプリの起動ボタンなど、URLを開く場面があれば、そのまま呼び出すだけで使えます。



