top of page

​タグ一覧

配列処理(76)

シート・セル操作(34)

階層化フォーム(33)

ファイル操作(31)

開発事例(26)

図形操作(24)

設計思想(14)

講座実施報告(12)

開発効率化(10)

ユーザーフォーム(10)

コード自動生成(10)

ココナラ(9)

数学(9)

文字列操作(8)

イベントプロシージャ(7)

GAS(7)

Webアプリ(6)

副業(5)

アニメーション(5)

技術解説(4)

その他(5)

イミディエイトウィンドウ(4)

OneDrive(4)

Googleスプレッドシート(4)

クリップボード(4)

条件付き書式(4)

介護・福祉(4)

小説(3)

HTML(3)

JavaScript(3)

公開ツール(3)

Enum(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Outlook(2)

Discord(2)

シフト表(2)

LookerStudio(2)

日報(2)

カレンダー(2)

パズル(2)

小ネタ(2)

コード解説(2)

クラスモジュール(2)

Antigravity(2)

デスクトップアプリ(2)

スクレイピング(1)

スプレッドシート(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

超勉強会(1)

溶接ロボット(1)

楽天市場(1)

経理(1)

医療(1)

文書作成(1)

発注書(1)

WebAPI(1)

学校(1)

CAD(1)

PowerShell(1)

python(1)

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

8月25日
読了時間: 4分
OpenURLの説明画像。左に「URLを既定ブラウザで起動」の文字と外部リンクのアイコン、右にWscript.Shellで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が既定のブラウザで開きます。

OpenURLの実行サンプル

 

依存プロシージャ

このコードは自作の依存プロシージャを持たない、自己完結した部品です。上のコードブロックをそのまま標準モジュールに貼り付ければ動作します。

 

応用・注意点

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を開く場面があれば、そのまま呼び出すだけで使えます。

Excel VBAによる業務自動化・ツール開発をご検討の方へ

​"脱Excel"の前に、現状のExcelの潜在能力を120%発揮してみませんか?

softex-celwareロゴ 透過 横長.png

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page