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

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

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

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

Internet Explorer

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

HTML

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

Q&A

解決済

2回答

10039閲覧

VBA IE操作 - td要素のinnertextを取得したい。

koyamashinji

総合スコア45

VBA

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

Internet Explorer

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

HTML

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

0グッド

0クリップ

投稿2020/06/17 07:54

下記のようなHTMLから、■の位置にあるinnertextに基づいて、●のinnertext「りんご」や「バナナ」を取得したいです。

パラメータXが■のinnertextと合致する場合に、
■のあるtd内の2番目のtr要素のinnertextを取得できるコードを
お教えいただきたく。

idも付与されておらず、
しかもtrのclass名も全て一緒なので、
取得方法がわからず悩んでいます・・・

<tbody> <tr class = "A"> <td class = "A-1" nowrap="..."> <b>Apple</b> ■ </td> <td style = "..."> <span>りんご</span> ● </td> </tr> <tr class = "A"> <td class = "A-1" nowrap="..."> <b>Banana</b> ■ </td> <td style = "..."> <span>バナナ</span> ● </td> </tr> ・ ・ ・ </tbody>

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

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

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

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

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

guest

回答2

0

ベストアンサー

tr にクラス名 A が付与されているのでそれを使えば簡単にできそうです。

getElementsByClassName("A") でAクラスのtr要素のコレクションを取得して、それをFor Each で回す。
その各tr要素のtd要素を getElementsByTagName("td")でコレクションとして取得する。
最初のtd要素とパラメータを比較して、一致すれば2番目のtd要素のinnerTextを返す。

コードのイメージとしては下記のような感じでしょうか。

vba

1Dim X As String 2X = "Apple" 3 4Dim A As Object, tds As Object 5For Each A In objIE.Document.getElementsByClassName("A") 6 set tds = A.getElementsByTagName("td") 7 If tds(0).innerText = X Then 8 Msgbox tds(1).innerText 9 Exit For 10 End If 11Next

投稿2020/06/18 05:58

編集2020/06/18 06:01
hatena19

総合スコア34075

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

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

koyamashinji

2020/06/18 09:07

具体的なコードを示していただき、大変助かりました。 貴殿ご提示のコードで、動作OKとなりました。 下名のようなど素人の質問にも丁寧に回答いただき感謝いたします。
guest

0

コードではありませんが、考え方を書いてみました。
(一応、ご提示のHTMLのパターンのみで判断しています。)
いかがでしょうか?
(1)getElementsByTagName("tr")やgetElementsByClassName("A")を使い、対象の tr タグを絞り込む。
(2)英名・和名の変数を2つ用意し、値は空にしておく。
(3)上記trタグ内のtdタグコレクションをgetElementsByTagName("td")で取得し、ループで各内容を調べる。
もし、tdタグのClass名が"A-1"である場合には、tdタグのInnerTextを英名の変数に入れる。
また、tdタグのgetElementsByTagName("span").Count = 1の場合には、tdタグのInnerTextを和名の変数に入れる。
(各変数内には余計なスペースや改行が入っている場合があるので、これらは取り除く)
(4)上記(3)のループ評価が終わったら、英名の変数の内容を調べ、もし指定の内容だったら和名の変数の中身が答えとなる。

投稿2020/06/17 08:24

編集2020/06/17 08:49
kenshirou

総合スコア772

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

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

koyamashinji

2020/06/18 09:07

kenshirouさん、毎度、ご回答ありがとうございます。 貴殿の提示頂いた考え方は大変、参考になりました。 今回は、具体的なコードを提示くださった方がいるので、大変恐縮ですがそちらの方をベストアンサーにさせていただきます。 また是非よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問