🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Q&A

解決済

1回答

858閲覧

[VBA]長いWebページの下のほうにあるコンテンツの<li>タグの一覧がほしいです。

sumire_cl

総合スコア228

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

0グッド

0クリップ

投稿2019/10/28 02:05

編集2019/10/28 02:06

前提・実現したいこと

このページ
Wikipedia:全言語版の統計
の、
「備考」の「新規開設」のところを持ってきて、Excelに一覧表にしたいです。
こんな感じ(別にこの形でなくてはいけない、ということではなくて、データをまるっとExcelに持ってきたいということです)
イメージ説明

該当のソースコード

ここまでは書きました。

VBA

1 Dim objIE As InternetExplorer 2 Set objIE = CreateObject("Internetexplorer.Application") 3 objIE.Visible = True 4 5 'Wikipedia:全言語版の統計 6 objIE.navigate "https://ja.wikipedia.org/wiki/Wikipedia:%E5%85%A8%E8%A8%80%E8%AA%9E%E7%89%88%E3%81%AE%E7%B5%B1%E8%A8%88" 7 8 9 Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE 10 DoEvents 11 Loop 12 13 14 Dim UList As HTMLDocument 15 Set UList = objIE.document.getElementById("mw-content-text").all.tags("div")(0).all.tags("dl")(0).all.tags("ul")(0)

該当の「新規開設」のところのULリストの箇所のHTMLをまるごとオブジェクトにして変数UListに格納したところまでです。

UList.outerHTMLを見ると

text

1<ul><li>2019年 2<ul><li>4月4日 - <a title="西アルメニア語" href="/wiki/%E8%A5%BF%E3%82%A2%E3%83%AB%E3%83%A1%E3%83%8B%E3%82%A2%E8%AA%9E">西アルメニア語</a> (<a title="hyw:" class="extiw" href="https://hyw.wikipedia.org/wiki/">hyw:</a>)</li></ul></li> 3<li>2018年 4<ul><li>11月14日 - <a title="シャン語" href="/wiki/%E3%82%B7%E3%83%A3%E3%83%B3%E8%AA%9E">シャン語</a> (<a title="shn:" class="extiw" href="https://shn.wikipedia.org/wiki/">shn:</a>)</li> 5<li>8月2日 - <a title="サンタル語" href="/wiki/%E3%82%B5%E3%83%B3%E3%82%BF%E3%83%AB%E8%AA%9E">サンタル語</a> (<a title="sat:" class="extiw" href="https://sat.wikipedia.org/wiki/">sat:</a>)</li> 6<li>4月18日 - <a title="イングーシ語" href="/wiki/%E3%82%A4%E3%83%B3%E3%82%B0%E3%83%BC%E3%82%B7%E8%AA%9E">イングーシ語</a> (<a title="inh:" class="extiw" href="https://inh.wikipedia.org/wiki/">inh:</a>)</li> 7<li>4月18日 - <a title="ゴロンタロ語" href="/wiki/%E3%82%B4%E3%83%AD%E3%83%B3%E3%82%BF%E3%83%AD%E8%AA%9E">ゴロンタロ語</a> (<a title="gor:" class="extiw" href="https://gor.wikipedia.org/wiki/">gor:</a>)</li> 8<li>4月18日 - <a title="リングア・フランカ・ノバ" href="/wiki/%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%BB%E3%83%95%E3%83%A9%E3%83%B3%E3%82%AB%E3%83%BB%E3%83%8E%E3%83%90">リングア・フランカ・ノバ</a> (<a title="lfn:" class="extiw" href="https://lfn.wikipedia.org/wiki/">lfn:</a>)</li></ul></li> 9<li>2017年 10<ul><li>7月5日 - <a title="ディンカ語" href="/wiki/%E3%83%87%E3%82%A3%E3%83%B3%E3%82%AB%E8%AA%9E">ディンカ語</a> (<a title="din:" class="extiw" href="https://din.wikipedia.org/wiki/">din:</a>)</li> 11<li>6月24日 - <a title="カビエ語" href="/wiki/%E3%82%AB%E3%83%93%E3%82%A8%E8%AA%9E">カビエ語</a> (<a title="kbp:" class="extiw" href="https://kbp.wikipedia.org/wiki/">kbp:</a>)</li> 12<li>6月21日 - <a title="アティカメク語" href="/wiki/%E3%82%A2%E3%83%86%E3%82%A3%E3%82%AB%E3%83%A1%E3%82%AF%E8%AA%9E">アティカメク語</a> (<a title="atj:" class="extiw" href="https://atj.wikipedia.org/wiki/">atj:</a>)</li> 13<li>4月24日 - <a title="ドテリ語" href="/wiki/%E3%83%89%E3%83%86%E3%83%AA%E8%AA%9E">ドテリ語</a> (<a title="dty:" class="extiw" href="https://dty.wikipedia.org/wiki/">dty:</a>)</li></ul></li> 14<li>2016年 15<ul><li>10月7日 - <a title="リッヴィ語" href="/wiki/%E3%83%AA%E3%83%83%E3%83%B4%E3%82%A3%E8%AA%9E">リッヴィ語</a> (<a title="olo:" class="extiw" href="https://olo.wikipedia.org/wiki/">olo:</a>)</li> 16<li>8月4日 - <a title="トゥル語" href="/wiki/%E3%83%88%E3%82%A5%E3%83%AB%E8%AA%9E">トゥル語</a>版 (<a title="tcy:" class="extiw" href="https://tcy.wikipedia.org/wiki/">tcy:</a>)</li> 17<li>5月2日 - <a title="ジャマイカ・クレオール語" href="/wiki/%E3%82%B8%E3%83%A3%E3%83%9E%E3%82%A4%E3%82%AB%E3%83%BB%E3%82%AF%E3%83%AC%E3%82%AA%E3%83%BC%E3%83%AB%E8%AA%9E">ジャマイカ・クレオール語</a>版 (<a title="jam:" class="extiw" href="https://jam.wikipedia.org/wiki/">jam:</a>)</li> 18<li>2月11日 - <a title="アディゲ語" href="/wiki/%E3%82%A2%E3%83%87%E3%82%A3%E3%82%B2%E8%AA%9E">アディゲ語</a>版 (<a title="ady:" class="extiw" href="https://ady.wikipedia.org/wiki/">ady:</a>)</li></ul></li> 19<li>2015年 20<ul><li>7月22日 - <a title="南アゼルバイジャン語" href="/wiki/%E5%8D%97%E3%82%A2%E3%82%BC%E3%83%AB%E3%83%90%E3%82%A4%E3%82%B8%E3%83%A3%E3%83%B3%E8%AA%9E">南アゼルバイジャン語</a>版 (<a title="azb:" class="extiw" href="https://azb.wikipedia.org/wiki/">azb:</a>)</li> 21<li>6月16日 - <a title="ゴア・コンカニ語" href="/wiki/%E3%82%B4%E3%82%A2%E3%83%BB%E3%82%B3%E3%83%B3%E3%82%AB%E3%83%8B%E8%AA%9E">ゴア・コンカニ語</a>版 (<a title="gom:" class="extiw" href="https://gom.wikipedia.org/wiki/">gom:</a>), <a title="北ロル語" href="/wiki/%E5%8C%97%E3%83%AD%E3%83%AB%E8%AA%9E">北ロル語</a>版 (<a title="lrc:" class="extiw" href="https://lrc.wikipedia.org/wiki/">lrc:</a>)</li></ul></li> 22<li>2014年 23<ul><li>11月6日 - <a title="マイティリー語" href="/wiki/%E3%83%9E%E3%82%A4%E3%83%86%E3%82%A3%E3%83%AA%E3%83%BC%E8%AA%9E">マイティリー語</a>版 (<a title="mai:" class="extiw" href="https://mai.wikipedia.org/wiki/">mai:</a>)</li></ul></li> 24<li>2013年 25<ul><li>8月11日 - <a title="トゥバ語" href="/wiki/%E3%83%88%E3%82%A5%E3%83%90%E8%AA%9E">トゥバ語</a>版 (<a title="tyv:" class="extiw" href="https://tyv.wikipedia.org/wiki/">tyv:</a>)</li> 26<li>2月6日 - <a title="ミナンカバウ語" href="/wiki/%E3%83%9F%E3%83%8A%E3%83%B3%E3%82%AB%E3%83%90%E3%82%A6%E8%AA%9E">ミナンカバウ語</a>版 (<a title="min:" class="extiw" href="https://min.wikipedia.org/wiki/">min:</a>)</li></ul></li> 27<li>2012年 28<ul><li>3月27日 - <a title="レズギ語" href="/wiki/%E3%83%AC%E3%82%BA%E3%82%AE%E8%AA%9E">レズギ語</a>版 (<a title="lez:" class="extiw" href="https://lez.wikipedia.org/wiki/">lez:</a>)</li> 29<li>2月1日 - <a title="ヴェプス語" href="/wiki/%E3%83%B4%E3%82%A7%E3%83%97%E3%82%B9%E8%AA%9E">ヴェプス語</a>版 (<a title="vep:" class="extiw" href="https://vep.wikipedia.org/wiki/">vep:</a>)</li></ul></li> 30<li>2011年 31<ul><li>10月29日 - <a title="北ソト語" href="/wiki/%E5%8C%97%E3%82%BD%E3%83%88%E8%AA%9E">北ソト語</a>版 (<a title="nso:" class="extiw" href="https://nso.wikipedia.org/wiki/">nso:</a>)</li> 32<li>7月12日 - <a title="メグレル語" href="/wiki/%E3%83%A1%E3%82%B0%E3%83%AC%E3%83%AB%E8%AA%9E">メグレル語</a>版 (<a title="xmf:" class="extiw" href="https://xmf.wikipedia.org/wiki/">xmf:</a>)</li> 33<li>3月18日 - <a title="ラトガリア語" href="/wiki/%E3%83%A9%E3%83%88%E3%82%AC%E3%83%AA%E3%82%A2%E8%AA%9E">ラトガリア語</a>版 (<a title="ltg:" class="extiw" href="https://ltg.wikipedia.org/wiki/">ltg:</a>), <a title="カバルド語" href="/wiki/%E3%82%AB%E3%83%90%E3%83%AB%E3%83%89%E8%AA%9E">カバルド語</a>版 (<a title="kbd:" class="extiw" href="https://kbd.wikipedia.org/wiki/">kbd:</a>)</li> 34<li>1月23日 - <a title="ルシン語" href="/wiki/%E3%83%AB%E3%82%B7%E3%83%B3%E8%AA%9E">ルシン語</a>版 (<a title="rue:" class="extiw" href="https://rue.wikipedia.org/wiki/">rue:</a>)</li></ul></li> 35<li>2010年 36<ul><li>11月13日 - <a title="ガガウズ語" href="/wiki/%E3%82%AC%E3%82%AC%E3%82%A6%E3%82%BA%E8%AA%9E">ガガウズ語</a>版 (<a title="gag:" class="extiw" href="https://gag.wikipedia.org/wiki/">gag:</a>), <a title="プファルツ語" href="/wiki/%E3%83%97%E3%83%95%E3%82%A1%E3%83%AB%E3%83%84%E8%AA%9E">プファルツ語</a>版 (<a title="pfl:" class="extiw" href="https://pfl.wikipedia.org/wiki/">pfl:</a>)</li> 37<li>10月17日 - <a title="コミ・ペルミャク語" href="/wiki/%E3%82%B3%E3%83%9F%E3%83%BB%E3%83%9A%E3%83%AB%E3%83%9F%E3%83%A3%E3%82%AF%E8%AA%9E">コミ・ペルミャク語</a>版 (<a title="koi:" class="extiw" href="https://koi.wikipedia.org/wiki/">koi:</a>), <a title="バンジャル語" href="/wiki/%E3%83%90%E3%83%B3%E3%82%B8%E3%83%A3%E3%83%AB%E8%AA%9E">バンジャル語</a>版 (<a title="bjn:" class="extiw" href="https://bjn.wikipedia.org/wiki/">bjn:</a>), <a title="山地マリ語" href="/wiki/%E5%B1%B1%E5%9C%B0%E3%83%9E%E3%83%AA%E8%AA%9E">山地マリ語</a>版 (<a title="mrj:" class="extiw" href="https://mrj.wikipedia.org/wiki/">mrj:</a>)</li> 38<li>8月19日 - <a title="北フリジア語" href="/wiki/%E5%8C%97%E3%83%95%E3%83%AA%E3%82%B8%E3%82%A2%E8%AA%9E">北フリジア語</a>版 (<a title="frr:" class="extiw" href="https://frr.wikipedia.org/wiki/">frr:</a>)</li> 39<li>3月21日 - <a title="カラチャイ・バルカル語" href="/wiki/%E3%82%AB%E3%83%A9%E3%83%81%E3%83%A3%E3%82%A4%E3%83%BB%E3%83%90%E3%83%AB%E3%82%AB%E3%83%AB%E8%AA%9E">カラチャイ・バルカル語</a>版 (<a title="krc:" class="extiw" href="https://krc.wikipedia.org/wiki/">krc:</a>)</li></ul></li></ul>

となっているので、ここまでは正常に格納されているようなのです。

ここから、<li>タグ内のinnerTextもしくはinnerHTMLを順に拾っていけばいいのですよね?
なので、まず<li>タグのリストを得ようと

VBA

1 Dim allLIs As Object 2 allLIs = UList.all.tags("li")

と書いたら、実行時エラー438で止まります。
つまり、変数UListに対してHTMLタグで検索することができない、ということ……?

とりあえず、<li>タグのリストを得るにはどう書いたらいいのでしょうか?UListのデータ型がわるい?

補足情報(FW/ツールのバージョンなど)

Windows10、Excel2016、IE11です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記でうまくいくようです。

vbs

1 Dim UList As IHTMLElement 2 Set UList = objIE.document.getElementById("mw-content-text").all.tags("div")(0).all.tags("dl")(0).all.tags("ul")(0) 3 4 Dim rowPos As Long: rowPos = 1 5 Dim li As IHTMLElement 6 For Each li In UList.Children 7 Cells(rowPos, 1) = Left(li.innerText, 5) 8 Dim liCh As IHTMLElement 9 For Each liCh In li.Children(0).Children 10 Cells(rowPos, 2) = liCh.innerText 11 rowPos = rowPos + 1 12 Next 13 Next

リストの入れ子になっているので、Children で子要素を取得して For Each で回して取得しました。


ちなみに、質問のコードがエラーになるのはオプジェクトの代入なのに Set がないからだと思われます。
下記ですべてのli要素を取得できます。ただ、親子区別なく取得しますので、回答では Childrenを使用しました。

vba

1 Dim allLIs As Object 2 Set allLIs = UList.all.tags("li") 3 4 Dim li As IHTMLElement 5 For Each li In allLIs 6 Debug.Print li.innerText 7 Next

投稿2019/10/28 06:55

編集2019/10/28 07:33
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sumire_cl

2019/10/28 23:07

あっ set… よく忘れます ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問