質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

HTML

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

Q&A

解決済

2回答

29563閲覧

VBAでHTMLのClass下にあるClassを抽出する際の記述が分かりません。

Yukiyama7.4

総合スコア20

VBA

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

HTML

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

0グッド

2クリップ

投稿2017/06/05 01:59

編集2017/06/05 07:53

閲覧頂きありがとうございます。
VBAで下記の様なHTMLから「Class=EEE」にある値を抽出したいのですが、「Class=EEE」が複数ある為「getElementsByClassName("EEE").innerText」だけでは取得できません。
どの様に記述すればよいですか?

HTML

1<Class=AAA> 2 <Class=BBB> 3 <Class=EEE> 4 <Class=CCC> 5 <Class=EEE> 6 <Class=DDD> 7 <Class=EEE>

追記
すいません、質問の書き方を簡略化し過ぎて何をしたいかが抜けていました。
「getElementsByClassName("EEE")(0).innerText」で最初の「Class=EEE」のテキストを抽出はできます。
・「Class=BBB」下にある「Class=EEE」
・「Class=CCC」下にある「Class=EEE」 etc...
特定のclass下にある「Class=EEE」を抽出したい、と書くべきでした。

IDを利用しても特定できるのでしょうか。
確かに上層にIDはありますが、先に記載したclass群を全て含んでしまっています。

HTML

1<id=XXX> 2 <Class=AAA> 3 <Class=BBB> 4 <Class=EEE> 5 <Class=CCC> 6 <Class=EEE> 7 <Class=DDD> 8 <Class=EEE>

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

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

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

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

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

m.ts10806

2017/06/05 02:15

AAA,BBBなどをclassではなくIDにはできませんか?できるならchildrenを使って子要素取得が容易にできるはずなのですが・・・
guest

回答2

0

ベストアンサー

コレクションを返しますので、添え字を付けて各要素にアクセスします。VBAの場合は、添え字は()で囲みます。

'0番目のデータ Debug.Print ie.Document.GetElementsByClassName("EEE")(0).innerText

全要素にアクセスする場合は、ループさせます。For Each を使うと簡単です。

Dim elm As Object For Each elm In ie.Document.getElementsByTagName("EEE") Debug.Print elm.innerText Next

追記に対する回答

・「Class=BBB」下にある「Class=EEE」

For Each を入れ子にすればいいでしょう。

Dim elmB As Object Dim elmE As Object For Each elmB In ie.Document.getElementsByTagName("BBB") For Each elmE In elmB.Document.getElementsByTagName("EEE") Debug.Print elmE.innerText Next Next

・「Class=BBB」下にある「Class=EEE」
・「Class=CCC」下にある「Class=EEE」

「Class=EEE」が「Class=BBB」「Class=CCC」の直下にあることが保証されているなら、
parentElement を使ってもいいですね。

Dim elm As object For Each elm In ie.Document.getElementsByTagName("EEE") Select Case elm.parentElement.GetAttribute("className") Case "BBB", "CCC" Debug.Print elmE.innerText End Select Next

投稿2017/06/05 04:02

編集2017/06/05 09:00
hatena19

総合スコア33715

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

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

Yukiyama7.4

2017/06/05 09:55

回答ありがとうございます。 取り敢えずこの方法で試して、結果が出次第報告させて頂きます。
Yukiyama7.4

2017/06/05 15:18

回答ありがとうございました。 1つ目のコードを参考に無事望む動作のコードができました。
guest

0

GetElementsByClassName("EEE")

HTMLドキュメント内の指定したclass属性の要素オブジェクトのコレクションを返す。

GetElementsByClassName("EEE").innerText

だと、コレクションのプロパティinnerTextを呼び出してる。

個別要素取りたければ、添え字つける。

// 0番目のデータ GetElementsByClassName("EEE")[0].innerText

roopとかつかって全要素とる方がいいとは思います。

投稿2017/06/05 02:46

kanimaru

総合スコア1013

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問