質問するログイン新規登録
VBA

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

4回答

4025閲覧

VBA getAttribute("className")がnullになる原因を教えてください

colomiyu

総合スコア11

VBA

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/10/09 12:00

編集2018/10/09 12:10

0

1

vbaで乗換案内の料金を取得したいです

特定の条件のdlタグ配下にある、li class ="fare"の結果を取得したいです。

①getElementsByTagName("dl")をループで回して取得し、ルート1というテキストを検索
②①で見つかった場合、さらにgetElementsByTagName("li")で再度ループを回す
③getAttribute("className")="条件"で判定して料金を取得

③のgetAttributeがnullとなっているようで、条件分岐がスキップされてしまいます。

こちら、なにが原因でどこを直せば良いでしょうか?
助けてください。

発生している問題・エラーメッセージ

If dl_li.getAttribute("className") = "fare"の判定がされない。

該当のソースコード

VBA

1For Each dl In objIE.document.getElementsByTagName("dl") 2 If InStr(dl.innerText, "ルート1") > 0 Then 3 For Each dl_li In dl.getElementsByTagName("li") 4 If dl_li.getAttribute("className") = "fare" Then 5 '乗換案内のルート1の金額を取得する 6 ws.Cells(i, 10).Value = dl_li.innerText 7 End If 8 Next dl_li 9 End If 10 Next dl

html

1<dl> 2<dt><a href="#route01"><span class="icnAnchor">[↓]</span>ルート1</a></dt> 3<dd > 4<ul> 5<li class="time">20:49→<span class="mark">20:56</span><span class="small">7分</span></li> 6<li class="fare"><span class="mark">165円</span></li> 7<li class="transfer">乗換:<span class="mark">0回</span></li> 8<li class="priority"><span class="icnPriTime">[早]</span><span class="icnPriTrans">[楽]</span><span class="icnPriFare">[安]</span></li> 9 10</ul> 11</dd> 12</dl> 13 14--- 15<dl class="routeSummary"> 16<dt> 17<span class="label">ルート1</span> 18<ul class="priority"><li><span class="icnPriTime">[早]</span></li><li><span class="icnPriTrans">[楽]</span></li><li><span class="icnPriFare">[安]</span></li></ul> 19</dt> 20<dd> 21<ul><li class="time"><span>20:49発→<span class="mark">20:56着</span></span>7分(乗車7分)</li><li class="transfer">乗換:<span class="mark">0回</span></li> 22<li class="fare"><span class="icnIc">[priic]</span><span>IC優先:</span><span class="mark">165円</span></li> 23<li class="distance">4km</li> 24</ul> 25</dd>・・・・

試したこと

デバッグしてみたり、getElementsbyclassnameなど試みましたが、nullになります。

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

Windows10 Excel2013 VBA7.1

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

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

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

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

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

guest

回答4

0

hasAttributeで判定できないでしょうか。
(実際に試してはいません。回答を再々修正しました。)

VBA

1'If dl_li.getAttribute("className") = "fare" Then 2 3If dl_li.hasAttribute("class") Then 4 if dl_li.Attributes("class").Value = "fare" then 5 '乗換案内のルート1の金額を取得する 6 ws.Cells(i, 10).Value = dl_li.innerText 7 End If 8End If

投稿2018/10/09 12:12

編集2018/10/09 13:23
TanakaHiroaki

総合スコア1065

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

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

colomiyu

2018/10/09 12:16

早速のご回答ありがとうございます。 hasattributeというのがあったのですね! 移動中のため少し後になりますが試してみます。
TanakaHiroaki

2018/10/09 13:26

コードを再々修正しました。これでダメなら私では無理です。
colomiyu

2018/10/10 02:55

ご回答ありがとうございました。 試したのですが、エラーで無理そうでした。。
guest

0

getAttributeするのであれば、classNameではなく、HTMLに書いてあるとおりのclassで取得するのが正しいのではないかと思います。

vba

1If dl_li.getAttribute("class") = "fare" Then

投稿2018/11/20 05:33

maisumakun

総合スコア146704

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

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

0

単に

VBA

1dl_li.className

でいいと思いますがどうでしょうか?

投稿2018/10/10 05:16

x_x

総合スコア13749

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

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

colomiyu

2018/11/08 04:23

ご回答ありがとうございます。 確認が遅くなりもうしわけありません! 試してみます。
guest

0

getElementsByClassNameを使用して、料金の取得はできるようになりました。

ただ、getAttribute("className")がnullになる原因はわからないので分かる方がいらっしゃいましたら引き続きよろしくお願い致します。

クラスも存在し、また教わったdl_li.hasAttribute("class")でdl配下にクラスがあるということまで確認はできたのですがgetAttributeでは取れませんでした。

getAttributeはオブジェクトに対してのみ有効で、getElementsByTagNameで返ってきたものには使えないのでしょうか?

投稿2018/10/10 03:30

colomiyu

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問