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

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

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

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

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

HTML

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

Q&A

解決済

2回答

4431閲覧

getElementsByTagNameでのiframe内要素の取得

prof_n_hk

総合スコア6

VBA

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

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

HTML

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

0グッド

0クリップ

投稿2020/04/04 12:04

編集2020/04/05 04:37

###現状
Webページ上の表のデータをExcelで取得しようとしています。

VBA

1 2 Dim htmlDoc As HTMLDocument 3 Set htmlDoc = objIE.document 4 5 Dim objA As Object 6 For Each objA In htmlDoc.getElementsByTagName("tr") 7 '処理 8 Next

をステップインしながら実行すると、処理文に入っていないことが分かりました
(For文の次に、処理文はおろかNextに触れずに出てしまっています)
###試したこと
そこで、試しに対象ページのコンソールで

javascript

1document.getElementsByTagName("tr").length

を取得しようとすると、何故か0と表示されてしまいます。
同様に、同表内の要素のidを同様にgetElementByIdで取得しようとしてもnullとなってしまいます。

(追記)大変素人質問で申し訳ないのですが、実はiframe内の要素だったようでhtmlDocでは直接取得できないみたいですね。そこで、iframe内のtr要素の取得方法を教えてください!

###利用環境
IE 11.0.180
Windows 10 Home 1809
Office Home and Business Premium

今日VBAを勉強したてなので素人で申し訳ありませんがよろしくお願いします!

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

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

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

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

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

R.Mizukami

2020/04/04 12:28

document.getElementByTags("tr").length が 0 になるというのは本当でしょうか? JavaScript の document オブジェクトに一般的に定義されていない関数 getElementByTags の実行は、ほとんどの環境、ページでエラーになると思います。 できればコードは実際に実行したものをコピペで掲載してください。
prof_n_hk

2020/04/04 13:21 編集

document.getElementsByTagName("tr") の質問のtypoです ごめんなさい????
guest

回答2

0

「getElementByTags」は、JavaScriptには存在しないです。
「getElementsByTagName」でないでしょうか?

JS

1document.getElementsByTagName("tr").length

投稿2020/04/04 13:02

new1ro

総合スコア4528

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

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

prof_n_hk

2020/04/04 13:06

質問のTypoですごめんなさい???? でもそこじゃないです…
guest

0

ベストアンサー

をステップインしながら実行すると、処理文に入っていないことが分かりました

(For文の次に、処理文はおろかNextに触れずに出てしまっています)

もしエラートラップのコードがあるならそれをコメントアウトして実行した場合、エラーメッセージはでますか。でるなら、そのエラーメッセージを質問に追記してください。

エラーは出ないが、Forはスルーするということなら、下記のように書き換えて、イミディエイトウィンドウにどのように表示されるか確認してみてください。

vba

1 Dim htmlDoc As HTMLDocument 2 Set htmlDoc = objIE.document 3 4 5 Dim colTR As As IHTMLElementCollection 6 Set colTR = htmlDoc.getElementsByTagName("tr") 7 Debug.print "テーブルの行数:" & colTR.length 8 9 Dim objA As Object 10 For Each objA In colTR 11 '処理 12 Next

もし、テーブルの行数:0 とイミディエイトに出力されたなら、
読み込み後に、スクリプト等で動的にテーブルデータを出力している可能性があります。
APIのSleepで少し待機する処理を挿入するか、行数が想定数を超えるまでループで繰り返すようにするか、の対策をしてくみてください。

投稿2020/04/04 14:07

編集2020/04/05 00:54
hatena19

総合スコア33699

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

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

prof_n_hk

2020/04/05 03:52

ご回答ありがとうございます。 Set colTRの後にSleep 10000を入れてみましたが、やはり行数0と表示されてしまいました。 どうしたらよいのでしょうか?
hatena19

2020/04/05 04:25 編集

Set colTRの前に Sleep 10000 を入れたらどうなりますか。 もし、それでも テーブルの行数:0 となるなら、実際のURLとコードを提示してもらわないと原因の特定は難しいかも。提示してもらえば必ず特定できるとも限りませんが。 もし、そのサイトがスクレイピングできないように対策をしているとしたら、無理にデータ取得すると不正アクセス禁止法に抵触する恐れもありますので、そのサイトの規約をまずは確認する必要があります。
prof_n_hk

2020/04/05 04:32

行数0でした 本当に素人で申し訳ないのですがiframe内の要素だったみたいで、コンソールのターゲットをframeに変更すると正しいgetElementsの値が出てきました そこで、iframe内のtr要素を取得する方法を教えていただけますか?
hatena19

2020/04/05 04:40 編集

> コンソールのターゲットをframeに変更すると正しいgetElementsの値が出てきました そのコードをVBA用に書き換えればいいと思うのですが。 どのようなコードで確認しましたか。
prof_n_hk

2020/04/05 04:39

ieのコンソールのターゲットのタブを変更すると「現在のウィンドウ:iframeのsrc」と出てきてもう一回打っただけなのでどのようにvbaで書けばいいのかわからないです...
prof_n_hk

2020/04/05 05:31

ありがとうございます。 何度もすみませんが、td要素のinnerTextを取得しようとすると書き込みできません(70)が出てしまいますがこれはどうしたらよいのでしょうか?
hatena19

2020/04/05 05:43

これ以上は、実際の動作するコードと対象URLで検証しないと回答は難しいです。 また、内容によってはボランティアのこのようなサイトでのやり取りでは難しいかも。
prof_n_hk

2020/04/05 05:46

承知しました。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問