大日本プロレスの、後楽園ホール大会を表示 (getElementsByTagNameでタグ要素を取得)
公式サイトから興味のある大会を探して表示
公式サイトの興行日程の中で、自分の興味のある興行をVBAから表示する方法。
地名や会場名を使い、近所で開催される興行を調べる時に利用できる。
サンプルでは大日本プロレスを利用する。
大日本プロレス公式サイトのスケジュール
http://www.bjw.co.jp/calender.php
各興行へのリンクが画像ではなくテキストなのがポイント。
今回はここから後楽園ホール大会のリンクを探し、表示する。
大日本プロレスの後楽園ホール大会を表示するサンプル
Sub 大日本プロレスの後楽園ホール大会を表示() Dim obIE As Object 'IEオブジェクトを準備 Set obIE = CreateObject("InternetExplorer.Application") obIE.Visible = True obIE.Navigate "http://www.bjw.co.jp/calender.php" Do While obIE.ReadyState <> 4 Do While obIE.Busy = True Loop Loop Dim Obj As Object For Each Obj In obIE.Document.getElementsByTagName("a") '各アンカータグの処理 If Obj.innerText Like "*後楽園ホール*" Then Obj.Click Exit For End If Next End Sub
getElementsByTagName で取得したa要素がコレクションとしてObjに格納される。
innerTextでタグ内のテキストを取得し、「後楽園ホール」が含まれるものをクリック。
新日本プロレスのウェブサイトを、VBAから開く
新日本プロレスのウェブサイトを開くサンプル
VBAからプロレス団体の公式サイトを開く方法。
サンプルでは新日本プロレスを利用。
実行すると Internet Explorer が開き、新日本プロレスのウェブサイトが開く。
Sub IEで新日本プロレスのウェブサイトを開くサンプル() Dim IE As InternetExplorer Set IE = CreateObject("InternetExplorer.Application") IE.Navigate "http://www.njpw.co.jp/" IE.Visible = True End Sub
InternetExplorerオブジェクトのNavigateメソッドでURLを指定する。
URLの部分を変えれば他のサイトを開くこともできる。
読み込み待ちの処理
新日本プロレスのサイトは重い。
ウェブサイトが完全に読み込まれたことを確認してから次の処理に進む必要がある。
読み込み待ちの処理を加えたサンプル
Sub IEで新日本プロレスのウェブサイトを開くサンプル2() Dim IE As InternetExplorer Set IE = CreateObject("InternetExplorer.Application") IE.Navigate "http://www.njpw.co.jp/" IE.Visible = True 'ブラウザの読み込み待ちのためのループ Do While (IE.Busy = True) Or (IE.ReadyState < READYSTATE_COMPLETE) DoEvents Loop Debug.Print "読み込み完了" End Sub
Busyはその名の通りIEオブジェクトが忙しいかを返す。TRUEなら読み込みが完了していない。
ReadyState はIEが準備完了かを数値で返す。READYSTATE_COMPLETEは定数の4を表す。4未満の場合は読み込みが完了していない。
ループ中は DoEvents キーワードを付けておく。処理を一度Windowsに戻すことができる。
処理速度を優先する場合は外すこともあるが、ブラウザの完了待ちの場合は画面描画の更新が止まり固まったような状態になる。
ダブルクオーテーションを2重にするため、Replace関数を使う
ダブルクオーテーションが含まれるテキストを、csvファイルとして使うためにダブルクオーテーションを2重にすることがある。
ダブルクオーテーションをReplace関数で2重にするサンプル。
Sub ダブルクオーテーションの置換() Dim TEXT As String TEXT = "<p class=""sample"">文章</p>" Debug.Print TEXT TEXT = Replace(TEXT, """", """""") 'ダブルクオーテーションを2重にする Debug.Print TEXT End Sub
実行結果
<p class="sample">文章</p> <p class=""sample"">文章</p>
ダブルクオーテーションを2つ連続して入力することで「ダブルクオーテーション」を表す。
他の言語だと \" と表記することがある。似たような感じでVBAでは "" と表記する。
Replace関数で引数を指定する場合、最初と最後をダブルクオーテーションで囲う。
実際にcsvとして使う時には、全体をダブルクオーテーションで囲うので、以下のサンプルのようになる。
Sub ダブルクオーテーションの置換2() Dim TEXT As String TEXT = "<p class=""sample"">文章</p>" Debug.Print TEXT TEXT = """" & Replace(TEXT, """", """""") & """" '"を2重にして全体を"で囲う Debug.Print TEXT End Sub
実行結果
<p class="sample">文章</p> "<p class=""sample"">文章</p>"
Excel VBA の参照設定
プロレスファンプログラミング!!
プロレスファンとしてプログラミングに挑戦。
名付けて「プロレスファンプログラミング」
この「プロレスファンプログラミング」のとりあえずの目標。
- プロレス団体の公式サイトから、選手名鑑のデータをダウンロードしてまとめたり、興行の予定を整理したり
- 家の近くの都道府県の興行データだけを抽出
- 無料興行だけを抽出
「プヲタスケジュール 」という素晴らしすぎるサービスがあるけど、プヲタスケジュールを自分専用にカスタマイズしたようなものを作ることを目指す。
使用する言語
PCにエクセルが入っていたので、Excel VBAを使用する。
Excel VBAは、検索すれば情報は大量に出てくるし書籍も充実、質問掲示板やフォーラムもあちこちにある。
Excel VBAについて
Excelの使い方やVBEの開き方等は今回は説明しない。
早速始めよう。まずは参照設定から
Excel VBAでプロレスファンプログラミングをする場合、参照設定が必須。
最初に設定する。
VBEで[ツール]→[参照設定]を選択
Microsoft HTML Object Library
と
Microsoft Internet Controls
にチェックを入れる。
キーボードで半角の[m]を打つと、Mで始まるライブラリまでスクロールするので選択しやすい。
キーボードの[F2]を押すと、オブジェクトブラウザが開く。
先ほど参照設定でチェックを入れたライブラリがどのようなオブジェクトを含むか調べることができる。
ここで<すべてのライブラリ>のドロップダウンリストから SHdocVW を選択。
SHdocVWはMicrosoft Internet Controlsの別名でもある。
Microsoft Internet Controlsライブラリに含まれるオブジェクト、メソッド、ライブラリの一覧が確認できる。
これらのメソッド・プロパティを使用すると、Internet Explorerを手動で操作するのと同じようなことがExcel VBAから操作ができるようになる。
このあたりは、VBA独特の設定。
正直、この設定は面白くもなんともない。そして(この記事を含めて)ネットの解説はどこもわかりづらい。
一回設定すればそれで終わりなので、VBA経験者も忘れてたりする。
忘れてもググればなんとかなる、とはいえ、初心は忘れないようにする。