よく使うウェブページが複数あるとき、一つずつ開いていると面倒です。
また毎日確認したいページもあれば、曜日ごとに更新されるページもあります。
そこでエクセルであらかじめ設定した頻度に応じて、一括でウェブページを自動で開くプログラムを紹介します。
・エクセルでウェブページを開く曜日を設定する
・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勉強に役立つ内容を紹介しています。
興味がある人はご覧ください。