プロレスファンプログラミング (VBA編)

ノンプログラマーが書く、プログラミングブログ。 Excel VBA を使ったプロレスファン向けツール作成

大日本プロレスの、後楽園ホール大会を表示 (getElementsByTagNameでタグ要素を取得)

公式サイトから興味のある大会を探して表示

公式サイトの興行日程の中で、自分の興味のある興行をVBAから表示する方法。
地名や会場名を使い、近所で開催される興行を調べる時に利用できる。

サンプルでは大日本プロレスを利用する。

大日本プロレス公式サイトのスケジュール
http://www.bjw.co.jp/calender.php
f:id:otani3:20180204072030j:plain

各興行へのリンクが画像ではなくテキストなのがポイント。
今回はここから後楽園ホール大会のリンクを探し、表示する。

大日本プロレス後楽園ホール大会を表示するサンプル

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でタグ内のテキストを取得し、「後楽園ホール」が含まれるものをクリック。

実行結果

f:id:otani3:20180204070637j:plain

後楽園ホール大会(のテキストリンク)が2回以上ある場合は、1番最初のページだけが表示される。
後楽園ホール大会(のテキストリンク)が無い場合はスケジュールページを表示した状態で止まる。

新日本プロレスのウェブサイトを、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について

VBA 初心者」でGoogle検索するのが早いかも。

Excelの使い方やVBEの開き方等は今回は説明しない。

 

 

早速始めよう。まずは参照設定から

Excel VBAでプロレスファンプログラミングをする場合、参照設定が必須。

最初に設定する。

f:id:otani3:20180201233704g:plain

VBEで[ツール]→[参照設定]を選択

 

f:id:otani3:20180201233917g:plain

Microsoft HTML Object Library

Microsoft Internet Controls

にチェックを入れる。

キーボードで半角の[m]を打つと、Mで始まるライブラリまでスクロールするので選択しやすい。

 

 

 

キーボードの[F2]を押すと、オブジェクトブラウザが開く。

先ほど参照設定でチェックを入れたライブラリがどのようなオブジェクトを含むか調べることができる。

ここで<すべてのライブラリ>のドロップダウンリストから SHdocVW を選択。

f:id:otani3:20180201234818g:plain

 

SHdocVWはMicrosoft Internet Controlsの別名でもある。

Microsoft Internet Controlsライブラリに含まれるオブジェクト、メソッド、ライブラリの一覧が確認できる。

 

これらのメソッド・プロパティを使用すると、Internet Explorerを手動で操作するのと同じようなことがExcel VBAから操作ができるようになる。

 

 

このあたりは、VBA独特の設定。

正直、この設定は面白くもなんともない。そして(この記事を含めて)ネットの解説はどこもわかりづらい。

一回設定すればそれで終わりなので、VBA経験者も忘れてたりする。

 

 忘れてもググればなんとかなる、とはいえ、初心は忘れないようにする。

 

姉妹ブログのプロレスファンプログラミング (GAS編)では、Google Apps Script を利用しています。