
よく使うウェブページが複数あるとき、一つずつ開いていると面倒です。
また毎日確認したいページもあれば、曜日ごとに更新されるページもあります。
そこでエクセルであらかじめ設定した頻度に応じて、一括でウェブページを自動で開くプログラムを紹介します。
・エクセルでウェブページを開く曜日を設定する
・PC起動と同時にウェブページを開くように設定する(windows限定)
以下で詳しく紹介していきます。
目次
- 1 VBAでエクセルに入力した複数ウェブリンクを一括で開く
 - 2 VBA作成前の準備
 - 3 VBAプログラムの解説
- 3.1 プログラム0|変数宣言の指定
 - 3.2 プログラム1|プログラム開始
 - 3.3 プログラム2|シート設定
 - 3.4 プログラム3|セル範囲を取得
 - 3.5 プログラム4|コマンドラインの入力値を設定
 - 3.6 プログラム5|WScriptのオブジェクト生成
 - 3.7 プログラム6|コマンドラインの入力値を切り替えるフラグ
 - 3.8 プログラム7|エクセルの入力値をチェック
 - 3.9 プログラム8|B列がOFFのとき、Continueでスキップ
 - 3.10 プログラム9|C列が毎日、指定した曜日に該当するとき、処理を行う
 - 3.11 プログラム10|コマンドラインの入力値を設定
 - 3.12 プログラム11|コマンドライン実行
 - 3.13 プログラム12|スキップ処理
 - 3.14 プログラム13|プログラム終了
 
 - 4 Excel VBAについて詳しく理解したいなら
 
VBAでエクセルに入力した複数ウェブリンクを一括で開く
このページで紹介するのは以下のようなプログラムです。
・VBAで複数のウェブページを一括で開く(Google Chromeのブラウザ使用)
画像を使ってプログラムの仕様について説明します。
1. エクセルでウェブページを開く曜日を設定する
以下のようにエクセルに情報を入力しておきます。

ここでは以下の4つを入力します。
2. ON/OFF
3. 曜日
4. URL
1. No
番号を設定しています。
これは便宜上入力しているだけなので、Noがなくてもプログラムの実行に影響はしません。
2. ON/OFF
ONとOFFを切り替えます。
ONの場合は、ウェブページを開くフラグが立っている状態です。
OFFの場合は、ウェブページを開かないまま、スキップします。
3. 曜日

「毎日、月、火、水、木、金、土、日」から選択します。
「毎日」は曜日に関わらず、ウェブページを開きます。
「月、火、水、木、金、土、日」はプログラム実行日の曜日に応じて、ウェブページを開きます。
4. URL
開きたいウェブページのURLを入力しておきます。
2. VBAで複数のウェブページを一括で開く(Google Chromeのブラウザ使用)
このプログラムを実行すると、以下のように対象となるウェブページをまとめて開きます。

プログラム実行時は月曜日なので、No1,2,3,5を対象になるため、4つのウェブぺージを一括で開いてくれます。
なおGoogle Chromeで開く設定にしています。
3. PC起動と同時にウェブページを開くように設定する(windows限定)
このページで紹介するプログラムは、以下の2つの設定をしておくことで、PC起動と同時にウェブページを開かせることが可能です。
2. エクセル起動時に、このページで紹介するVBAプログラムを実行させる
1. PC起動時に、このページで紹介するVBAが含まれるエクセルを起動させる
PC起動と同時に、さまざまなアプリケーションを開くことが可能です。
たとえばエクセルやワードなどのアプリケーションをPCスタートと同時に起動できます。
設定方法は以下のページで紹介しています。
2. エクセル起動時に、このページで紹介するVBAプログラムを実行させる

上記の画像のように、1でPC同時に起動させるエクセルのVBEの設定を変更します。
具体的には、VBEのThisWorkbookに以下のプログラムを入力します。
| 
					 1 2 3 4 5  | 
						Option Explicit Private Sub Workbook_Open()     Call OpenWebPages End Sub  | 
					
これでPC起動とともに、複数のウェブページを自動で開かせることができます。
さて肝心のVBAプログラムは以下で紹介します。
VBA作成前の準備
1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
2. ウェブページを開くための参照設定
この事例ではコマンドラインでウェブページを開くために、windows Script Host Object Modelを活用します。
windows Script Host Object Modelを使用する場合、VBAの参照設定を変更しておく必要があります。
なおこの参照設定にチェックを入れていないと、本事例で紹介しているVBAプログラムは動作しません。
必ずチェックを入れるようにします。
VBAプログラムの解説
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60  | 
						'プログラム0|変数宣言の指定 Option Explicit 'プログラム1|プログラム開始 Sub OpenWebPages()     'プログラム2|シート設定     Dim ws As Worksheet     Set ws = Worksheets("Sheet1")     'プログラム3|セル範囲を取得     Dim myrange As Variant     myrange = ws.Range("A1").CurrentRegion     'プログラム4|コマンドラインの入力値を設定     Dim command1 As String, command2 As String     command1 = "chrome.exe --new-window -url "     command2 = "chrome.exe -url "     'プログラム5|WScriptのオブジェクト生成     Dim wsh As New IWshRuntimeLibrary.WshShell     Set wsh = New IWshRuntimeLibrary.WshShell     'プログラム6|コマンドラインの入力値を切り替えるフラグ     Dim flag As Boolean     flag = False     'プログラム7|エクセルの入力値をチェック     Dim i As Long     For i = 2 To UBound(myrange)         'プログラム8|B列がOFFのとき、Continueでスキップ         If myrange(i, 2) = "OFF" Then: GoTo Continue         'プログラム9|C列の曜日が該当しないとき、Continueでスキップ         If myrange(i, 3) = "毎日" Or myrange(i, 3) = Format(Date, "aaa") Then             Debug.Print Format(Date, "aaa")             'プログラム10|コマンドラインの入力値を設定             Dim commandline As String             If flag = False Then                 commandline = command1 & myrange(i, 4)                 flag = True             Else                 commandline = command2 & myrange(i, 4)             End If             Debug.Print commandline             'プログラム11|コマンドライン実行             wsh.Run commandline, 7, True         End If 'プログラム12|スキップ処理 Continue:     Next 'プログラム13|プログラム終了 End Sub  | 
					
以下で詳しく説明します。
プログラム0|変数宣言の指定
| 
					 1  | 
						Option Explicit  | 
					
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラム1|プログラム開始
| 
					 1  | 
						Sub OpenWebPages()  | 
					
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
| 
					 1 2 3  | 
						Sub プロシージャ名()     '実行プログラム End Sub  | 
					
「Sub」で始まり「End Sub」で終わります。
プロシージャに関連するmoduleの話については以下で説明しています。
プログラム2|シート設定
| 
					 1 2  | 
						    Dim ws As Worksheet     Set ws = Worksheets("Sheet1")  | 
					

Sheet1をwsとして取得します。
プログラム3|セル範囲を取得
| 
					 1 2  | 
						    Dim myrange As Variant     myrange = ws.Range("A1").CurrentRegion  | 
					

セル範囲を取得します。
プログラム4|コマンドラインの入力値を設定
| 
					 1 2 3  | 
						    Dim command1 As String, command2 As String     command1 = "chrome.exe --new-window -url "     command2 = "chrome.exe -url "  | 
					
コマンドラインを使ってGoogle Chromeを呼び出すので、その値をここで設定します。
command1は新しいウィンドウでGoogle Chromeを開きます。
command2は新しいタブでGoogle Chromeを開きます。
プログラム5|WScriptのオブジェクト生成
| 
					 1 2  | 
						    Dim wsh As New IWshRuntimeLibrary.WshShell     Set wsh = New IWshRuntimeLibrary.WshShell  | 
					
この事例ではコマンドラインでウェブページを開くために、windows Script Host Object Modelを活用します。
ここではwshにIWshRuntimeLibrary.WshShellのオブジェクトを生成し設定します。
なおwindows Script Host Object Modelを使用する場合、VBAの参照設定を変更しておく必要があるので、注意が必要です。
参照設定していないとエラーが表示されます。
プログラム6|コマンドラインの入力値を切り替えるフラグ
| 
					 1 2  | 
						    Dim flag As Boolean     flag = False  | 
					
この事例では、最初に開くウェブページは新しいウィンドウで開き、2つ目以降のウェブページは新しいタブで開きます。
この切り替えをflagを使って行います。
flag=Trueのとき、新しいタブで開く
上記の切り替えはプログラム10で行います。
プログラム7|エクセルの入力値をチェック
| 
					 1 2 3 4  | 
						    Dim i As Long     For i = 2 To UBound(myrange)         '中略     Next  | 
					

エクセルの2行目から最終行まで1行ずつ処理を行います。
プログラム8|B列がOFFのとき、Continueでスキップ
| 
					 1  | 
						        If myrange(i, 2) = "OFF" Then: GoTo Continue  | 
					

2列目(B列)がOFFになっていれば、プログラム9~プログラム11をスキップします。
OFFの場合は、プログラム12にジャンプします。
For Nextの処理スキップについては、以下で詳しく紹介しています。
プログラム9|C列が毎日、指定した曜日に該当するとき、処理を行う
| 
					 1 2 3  | 
						        If myrange(i, 3) = "毎日" Or myrange(i, 3) = Format(Date, "aaa") Then             '中略         End If  | 
					

C列の値が「毎日」、VBA実行日の曜日を一致すれば、処理を行います。
曜日に関しては、たとえばC列の値が「火曜」で、VBA実行日が「火曜」のときに実行します。
プログラム10|コマンドラインの入力値を設定
| 
					 1 2 3 4 5 6 7  | 
						            Dim commandline As String             If flag = False Then                 commandline = command1 & myrange(i, 4)                 flag = True             Else                 commandline = command2 & myrange(i, 4)             End If  | 
					
コマンドラインの入力値を設定します。
プログラム4で設定したcommand1とcommand2を、D列のウェブページのURLと組み合わせてcommandlineを作成します。
プログラム6で設定したflagを活用して、command1とcommand2を切り替えます。
command1は新しいウィンドウで、command2は新しいタブで、D列のウェブURLを開きます。
プログラム11|コマンドライン実行
| 
					 1  | 
						            wsh.Run commandline, 7, True  | 
					

プログラム10で設定したcommandlineを実行して、ウェブページを開きます。
プログラム12|スキップ処理
| 
					 1 2  | 
						Continue:     Next  | 
					
プログラム8で処理をスキップさせると、ここのContinue:に移動します。
そして次のForNextの処理を実行します。
プログラム13|プログラム終了
| 
					 1  | 
						End Sub  | 
					
プログラムはここで終了です。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
少しずつレベルアップしながら、難しい内容に挑戦していくと効率的に学ぶことができます。
上記のリンクでは、VBA勉強に役立つ内容を紹介しています。
興味がある人はご覧ください。






