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

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

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

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

Internet Explorer

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

HTML

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

Q&A

解決済

2回答

8387閲覧

VBAでhtmlのclassの取得

sobue

総合スコア329

VBA

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

Internet Explorer

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

HTML

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

0グッド

0クリップ

投稿2018/08/26 01:07

編集2018/08/26 02:04

VBA

1 Dim objTable As Object 2 For Each objTable In objIE.document.getElementsByTagName("table") 3 If InStr(objTable.document.getElementsByClassName, "specs-table") > 0 Then 4 Debug.Print objTable.Cells(0).outerHTML 5 Exit For 6 End If 7 Next

やりたいこと
Webページのtableを総なめして該当のclassを持つtableのみ処理を行いたい

環境
Windows10
Excel2010
IE11

起きている問題
Class名がうまく取得できず判定がうまくいかない

objTable.document.getElementsByClassName(0)など引数を入れてもダメでした。

ここのWebページのtableの要素を取得したい

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

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

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

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

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

guest

回答2

0

ベストアンサー

classの値を取得する場合はgetElementsByClassNameではなくgetAttributeを使います。
今回の場合は

VBA

1If InStr(objTable.getAttribute("class"), "specs-table") > 0 Then

でしょうか。

投稿2018/08/26 01:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sobue

2018/08/26 02:10 編集

取得できました。が疑問が残ります。 いつ「getElementsByClassName」を使用するのでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/26 04:17 編集

クラス名からエレメントを取得したいときです。 ちょうどgetElementsByTagNameで任意のタグに該当するエレメントを取得しているように、任意のクラス名に該当するエレメントを取得できます。getAttributeとは役割がまったく違います。 ですので、今回のケースでは、最初からgetElementsByClassName("specs-table")とすればよかったかもしれません。ただし、そのクラス名がtableタグ以外に割り当てられている可能性もありますので……。 あと、ページによっては使えないこともありますが、querySelectorAllというのが便利ですので、ご存知なければ調べてみてください。
guest

0

記載を全面的に見直しました。For Next の入れ子で取得できないでしょうか。

Dim objTable1 As Object Dim objTable2 As Object For Each objTable1 In objIE.document.getElementsByTagName("table") For Each objTable2 In objTable1.getElementsByClassName("specs-table") Debug.Print objTable2.outerHTML Next objTable2 Next objTable1

投稿2018/08/26 01:30

編集2018/08/26 01:46
TanakaHiroaki

総合スコア1063

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

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

sobue

2018/08/26 01:35

メソッドがサポートされていませんとでました。
TanakaHiroaki

2018/08/26 01:50

For Next の入れ子で取得できないでしょうか。回答の見直しを行いました。
sobue

2018/08/26 02:09

取得できませんでした
TanakaHiroaki

2018/08/26 02:39

大変失礼しました。 denchiさんの回答で取得できたとのことなので、解決済ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問