【Excelマクロ(VBa)】IEの操作(Yahoo乗換案内のサンプルソース)



Excelマクロ(VBa)によるIEの操作方法をYahoo乗換案内をもとに下記のようにご紹介しましたが、サンプルソースを添付します。


   IEの操作方法


  1.IE起動~終了
  2.IEの操作(テキストボックス)
  3.IEの操作(ラジオボタン)
  4.IEの操作(コンボボックス)
  5.IEの操作(チェックボックス)
  6.IEの操作(ボタンをクリック)
  7.IEの操作(データを取得する)


   サンプルソースのご紹介


▽画面
  上記機能を備えた最低限の処理しかできませんが・・・。


ダウンロードは、下記リンクから可能です。(ZIPで圧縮してます)
ダウンロードされる方はコメント頂けると嬉しいです

  2019/01/10更新
  ・サンプルExcelマクロ(圧縮版)


カテゴリー: VBa(Excelマクロ), システム開発 | 2件のコメント

【Excelマクロ(VBa)】IEの操作(データを取得する)


IE起動~終了までは述べたので、起動後のIEの操作をExcelマクロ(VBa)で行います。尚、コーディングするにあたっては、多少htmlの知識が必要です。(読めないと記述できません)

操作するページは引き続きYahooの乗換案内です。(サンプルソース)


   画面の値


IEの操作でテキストボックスラジオボタンコンボボックスチェックボックス、【検索】ボタンのクリックをご紹介しましたが、今回は検索した結果のデータ取得をご紹介します。

東京 ~ 渋谷までの乗換案内検索をすると、下記のような結果が取得できました。




   html


これをhtml上で確認すると、下記となります。(今回は「ルート1」時間・金額・乗換回数に限定)
idが設定されていれば getElementById("~") を使う事で簡単に値を取得する事ができるのですが、今回はidが設定されていないので、dlタグliタグclass="~"に注目します。

<dl>
<dt><a href="#route01"><span class="icnAnchor">[↓]</span>ルート1</a></dt>
<dd >
<ul>
<li class="time">26分</li>
<li class="fare"><span class="mark">194円</span></li>
<li class="transfer">乗換:<span class="mark">0回</span></li>
<li class="priority"><span class="icnPriTime">[早]</span><span class="icnPriTrans">[楽]</span><span class="icnPriFare">[安]</span></li>

</ul>
</dd>
</dl>


   html(dlタグ)


dlタグは乗換案内の検索結果のページに多く出てくるので、ループして該当の箇所を見つけます。見つけ方はルート1の文字列を含むものを特定します。

  <乗換案内html>
<dl>
<dt><a href="#route01"><span class="icnAnchor">[↓]</span>ルート1</a></dt>
<dd >
<ul>
  ・
  ・
</ul>
</dd>
</dl>

  <Excelマクロ(VBa)>
'変数定義
Dim dl As IHTMLElement

'dlタグ分ループする
For Each dl In objIE.document.getElementsByTagName("dl")

  '「ルート1」を含むかチェックする
  If InStr(dl.innerText, "ルート1") > 0 then
    ・
    ・
  End If

Next dl


   html(liタグclass)


liタグは上記dlタグ(ルート1)に4回出てくるので、dlタグと同じようにループを使います。該当のデータを見つけるにはclassで特定します。

今までは文書全体からデータを取得していたので、
  objIE.document.getElementsByTagName
を使ってましたが、今回は該当のdlタグが取得できたので、
  dl.getElementsByTagName
を使います。

また、classはタグではなく属性なので getAttribute("属性") を使います。但し、class の場合には getAttribute("className") と記述する点は注意が必要です。(getAttribute("class")ではない)

  <乗換案内html>
<li class="time">26分</li>
<li class="fare"><span class="mark">194円</span></li>
<li class="transfer">乗換:<span class="mark">0回</span></li>
<li class="priority"><span class="icnPriTime">[早]</span><span class="icnPriTrans">[楽]</span><span class="icnPriFare">[安]</span></li>

  <Excelマクロ(VBa)>
'変数定義
Dim dl_li As IHTMLElement

'dlタグ内をループする
'  (注)上記「If InStr(dl.innerText, "ルート1") > 0 then」内に記述する
For Each dl_li In dl.getElementsByTagName("li")

  '時間を特定
  If dl_li.getAttribute("className") = "time" Then
    ・
    ・
  End If

  '金額を特定
  If dl_li.getAttribute("className") = "fare" Then
    ・
    ・
  End If

  '乗換回数を特定
  If dl_li.getAttribute("className") = "transfer" Then
    ・
    ・
  End If

Next dl_li

 

   データの取得


これでようやく該当のデータに辿り着けたので、innerText を使って該当の値を取得します。

  <乗換案内html>
<li class="time">26分</li>

  <Excelマクロ(VBa)>
dl_li.innerText


   乗換案内のルート1の金額を取得する


最後に通して記述すると下記のようになります。

'変数定義
Dim dl As IHTMLElement
Dim dl_class As IHTMLElement
Dim dl_li As IHTMLElement

'dlタグ分ループする
For Each dl In objIE.document.getElementsByTagName("dl")

  '「ルート1」を含むかチェックする
  If InStr(dl.innerText, "ルート1") > 0 Then

    'dlタグ内をループする
    For Each dl_li In dl.getElementsByTagName("li")

      '金額を特定
      If dl_li.getAttribute("className") = "fare" Then
        '乗換案内のルート1の金額を取得する
        MsgBox dl_li.innerText
      End If

    Next dl_li

  End If

Next dl
カテゴリー: VBa(Excelマクロ), システム開発 | コメントする

【ポケモンGO】グローバルチャレンジ(ブロンズ解放!)



2017年11月20日から開始した「グローバルチャレンジ」イベントですが、第一関門のブロンズを1日半くらいで解放しました!

既に以下の効果が得られていますが、「ポケモンが多く見つかる」という効果はイマイチよく分からないです。確かに余り見かけないポケモンが町中でPOPするので効果は少し実感できる・・・程度です。この効果はシルバーの「ポケモンがより多く見つかる」に期待です。

・経験値2倍
・ルアーモジュールの有効期間が6時間
・ポケモンが多く見つかる

ところで、ナイアンテック社もムリなお題は出さないだろう・・・と高を括ってましたが、30億ポケモンをゲットするには厳しいのでは?という声が一部で挙がり始めました。

確かに5億匹ゲットに1日半費やしたとしたら、6倍ともなると9日間必要という事になります。

開始が月曜だったという事と、告知が行き渡っているか?!という点が疑問です。

30億匹ゲットを達成してガルーラをゲットしたいですね!


カテゴリー: ポケモンGO | コメントする

【ポケモンGO】グローバルチャレンジ(2017/11/20~2017/11/26)



イベント期間 2017年11月20日(月) ~ 2017年11月26日(日) に30億匹のポケモンをゲットしよう!(公式サイト)のイベントです。この間は 特にイベントらしきものがありませんが、この間に捕まえたポケモンの数によって、発生するイベントが変わってきます。5億匹ゲットした時点で、ブロンズの効果が発動、15億匹ゲットした時点で、シルバーの効果が発動・・・というように。


   ■ ブロンズ : 世界で合計5億匹のポケモンをゲット!


・経験値2倍
・ルアーモジュールの有効期間が6時間
・ポケモンが多く見つかる


   ■ シルバー : 世界で合計15億匹のポケモンをゲット!


・経験値2倍
・ルアーモジュールの有効期間が6時間
・ポケモンがより多く見つかる
・ほしのすな2倍


   ■ ゴールド : 世界で合計30億匹のポケモンをゲット!


・経験値2倍
・ルアーモジュールの有効期間が6時間
・ポケモンが多く見つかる
・ほしのすな2倍
・ガルーラが東アジアに登場!
・カモネギが世界中に登場!

この間に是非とも30億匹をゲットしてゴールドをゲットし、ガルーラが東アジアに湧くように頑張りましょう!(^^)!

ところで、2017年6月8日時点でポケモンGOのダウンロード数は7億5千万回(公式サイト)なので、単純に計算すれば、一人4匹ゲットすればゴールドゲットとなるハズなのですが、結構ユーザー離れしていそうなので・・・実稼動数は何人なんでしょう?


カテゴリー: ポケモンGO | コメントする

【Excelマクロ(VBa)】IEの操作(ボタンをクリック)

IE起動~終了までは述べたので、起動後のIEの操作をExcelマクロ(VBa)で行います。尚、コーディングするにあたっては、多少htmlの知識が必要です。(読めないと記述できません)

操作するページは引き続きYahooの乗換案内です。(サンプルソース)


   ボタンをクリック


IEの操作でテキストボックスラジオボタンコンボボックスチェックボックスの操作をご紹介しましたが、Yahooの乗換案内を操作する上で【検索】ボタンを押さないと意味がありません。



これも今まで通りで、ソースコードは下記の通り、注目はid=~です。タグにidが設定されている場合は、getElementById("~") を使う事で操作できます。

そして、ボタンをクリックする場合は、
objIE.document.getElementById(idの値).Click
で操作します。

【検索ボタン】
  <乗換案内html>
<p class="btnSearch"><input type="submit" value="検索" id="searchModuleSubmit"></p>

  <Excelマクロ(VBa)>
  ▽検索ボタンをクリック
objIE.document.getElementById("searchModuleSubmit").Click


カテゴリー: VBa(Excelマクロ), システム開発 | コメントする