VBAでHTMLからテキストを抜き出す処理

このQ&Aのポイント
  • VBAを使用して、HTMLからテキストを抜き出す処理を行いたいです。
  • 初心者のため、アドバイスをいただけると助かります。
  • 抜き出す値の行数に応じた処理を実装したいです。
回答を見る
  • ベストアンサー

VBAでHTMLからテキストを抜き出す処理

ネットで調べて見様見真似で下記のコードを作成しました。HTMLからテキストを抜き出す処理をしています。(VBAのツール→参照設定で、Microsoft Internet Controls と Microsoft HTML Object Library にチェックを入れています。) すると上の画像のように、2行以上ある場所が一つのセル内に改行されて挿入されます。それを下の画像のように、1行ずつセル分けしたいのです。VBAは初心者なので、どうかアドバイス頂けないでしょうかm(_ _)m ちなみに、URLは一つの例に過ぎず、A列が3行だったり5行だったりもします。ただ、A列の抜き値は最大でも16行、B列は8行、C列は4行、D列は2行、E列は1行という法則なので、それにも対応できるようにしたいです。 Sub dom() Dim ie As InternetExplorer Dim i As Long Set ie = CreateObject("internetExplorer.Application") ie.Visible = True ie.Navigate "http://db.netkeiba.com/horse/ped/2009105009/" Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE DoEvents Loop Dim htdoc As HTMLDocument Set htdoc = ie.Document For i = 0 To 4 Cells(2, i + 1) = htdoc.getElementsByTagName("TD")(i).innerText Next End Sub

この投稿のマルチメディアは削除されているためご覧いただけません。
  • mzakom
  • お礼率38% (129/338)

質問者が選んだベストアンサー

  • ベストアンサー
  • oka_me
  • ベストアンサー率86% (26/30)
回答No.1

こちらを参考に 【FXの値 .innerTEXTで値を取得後 Splitで分解 UBoundでループ】 http://ken3memo.blogspot.jp/2011/07/ie-fx-innertext-split-ubound.html 実装するとこんな感じでしょうか。。 For i = 0 To 4 tmp = Split(htdoc.getElementsByTagName("TD")(i).innerText, vbCrLf) For r = 0 To UBound(tmp) Cells(r + 2, i + 1) = tmp(r) Next Next ※tmpはVariantで宣言して下さい

mzakom
質問者

お礼

素晴らしい回答ありがとうございました。

関連するQ&A

  • ExcelのVBAでHTML内の特定のタグの出現回数を調べたい

    たとえばYahoo!JapanのサイトのHTMLのTDタグの出現回数を調べる場合 下記のVBAに何を付け加えればよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit 'td_count = ここの部分がわかりません。 '文字列の出現回数をカウントする関数はないのでしょうか? MsgBox td_count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003

  • <pre>タグ内のテキストを取得 エクセル VBA

    HTML文書で以下のようになっているテキストをエクセルVBAで取得しようと思います。 <pre class="fontsize3"><tt> テキスト </tt></pre> 以下のコードを書きましたが、失敗しています。 Dim htdoc As HTMLDocument Set htdoc = ie.Document Cells(1,1) = htdoc.getElementsByTagName("pre")(0).innerText 何がまちがっているのでしょうか。

  • 特定のVBAコードの学習

    こちらのサイトに掲載されているVBAがとても便利だったので、これをとりかかりにExcel VBAの学習をしたいと思っています。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1230707792 行ごとに何を意味するものが書かれているのか、調べながら学習したいのですが、適当なサイトや書籍がありましたら教えてください。 コードも下記に記します。 Sub sample() Const READYSTATE_COMPLETE = 4 Dim ie As Object Dim r As Long Set ie = CreateObject("InternetExplorer.Application") 'ie 'ie.Visible = True 'ieを表示する場合 r = 1 '注目行の初期値 Do While Range("A" & r) <> "" 'A列が空白でない間 ie.navigate Range("A" & r).Value '注目行のA列のURlにアクセス Do While ie.busy Or (ie.readystate <> READYSTATE_COMPLETE): DoEvents: Loop '表示完了待ち Range("B" & r).Value = ie.document.Title '注目行のB列にurlのタイトル書き込み r = r + 1 '注目行+1 Loop ie.Quit 'ieを閉じる Set ie = Nothing End Sub

  • VBAでMicrosoft Edgeから開く方法

    ExcelVBAマクロについて確認させてください。 これは「Internet Explorer(IE)」になっているので「Microsoft Edge」また「Google Chrome」ソフトに変更する場合はどのように変更すればよいかご教授くださいm(_ _)m 下記のプログラムの具体的な仕様 1)現在開いているInternet ExplorerのWebサイトアドレスをA1セルから順に出力する。 2)A1セルに主力したWebサイトアドレスを一つずつ開いて、閉じる。 Sub test() '現在開いているURLの取得 Dim sh As Object Dim win As Object Dim buf As String Dim i As Integer Dim n As Integer Dim strUrl As String Set sh = CreateObject("Shell.Application") For Each win In sh.Windows 'ウインドウの数だけ回す If win.Name = "Internet Explorer" Then buf = buf & " " & win.LocationURL End If Next '空白毎に区切ってセルに代入 Worksheets(1).Range("A1").Resize(UBound(Split(Trim(buf), " ")) + 1).Value = WorksheetFunction.Transpose(Split(Trim(buf), " ")) i = Worksheets(1).Cells(1, 1).End(xlDown).Row '現在開いているURLの数を取得 For n = 1 To i strUrl = Worksheets(1).Cells(n, 10) '文書策定画面を文字列strUrlに代入 'IEオブジェクトを作成 Dim ie As InternetExplorer Set ie = New InternetExplorerMedium 'IEを表示(見えるようにする) ie.Visible = True '指定したURLをIEで開く ie.navigate strUrl 'サイトの読み込みが完了するまで待つ Do While ie.Busy = True Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop 'オブジェクトを閉じる ie.Quit 'メモリからオブジェクトを破棄 Set ie = Nothing Next n End Sub

  • ExcelのVBAの正規表現で二重引用符を含む文字列を検索できるようにしたい

    二重引用符を含む文字列を検索できるようにするには 下記の記述の re.Pattern = "<hr class=\"separate\">" の部分をどのように直せばよいのでしょうか? Sub tagCount() Dim cnt As Integer Dim IE As Object Dim HTML As String Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML IE.Quit Dim re As RegExp Dim mc As MatchCollection Dim m As Match Set re = New RegExp re.Pattern = "<hr class=\"separate\">" re.Global = True re.IgnoreCase = True Set mc = re.Execute(HTML) MsgBox mc.Count End Sub ご存知の方がおられましたらご回答をよろしくお願いします。 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003

  • VBAでのIE操作で、ENTERキーが押せません

    VBAでIEの操作を勉強中です。 HTMLを整形するホームページ(https://lab.syncer.jp/Tool/HTML-PrettyPrint/)です。 左側のエリアにHTMLを入力すると右側に整形されたHTMLが表示されるものです。 手動ではなんら問題ありません。 作成したVBAから操作すると、左側のエリアにHTMLは入力されますが、右側に表示されません。 入力後にENTERキーが押されれば表示されるというところまでは解っています。 解っているんですが、VBAから押せません。 どなたかご教示願います。 以下作成したVBAです。 ----------------------------------------------------------------------- Sub testIE() Dim IE As Object Dim target As String Dim wText As String target = "https://lab.syncer.jp/Tool/HTML-PrettyPrint/" wText = "<html><head><title>test</title></head><body><h1>test</h1></body></html>" Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Navigate target Do While .Busy = True Or .ReadyState <> 4 DoEvents Loop Do While .Document.ReadyState <> "complete" DoEvents Loop .Document.getElementsByTagName("textarea")(0).Value = wText SendKeys "{ENTER}" MsgBox .Document.getElementsByTagName("textarea")(1).Value End With End Sub

  • VBA教えて下さい

    VBA初心者です やりたいこと 変数を宣言し 今開いているシート(activesheet)に for nextを使用し 列5~20を調べ 行3~5を指定し もし、5~20列の2行目のどれかに”No.8”という文字があれば(ここまでのコードは書けました) その当てはまる列の3~5行を選択し(1) 更に、(1)の下2列を選択する(2) そして、(1)と(2)を結合させる といったコードが書きたいです 考えたコード Sub test() Dim i As Long Dim j As Long With ActiveSheet For j = 5 To 20 For i = 3 To 5 If .Cells(j, 2) Like "*No.8*" Then 'ここからがわかりません End If Next i Next j End With End Sub 変な書き方なので例えを書きます A1セルにNo.8の文字があれば E1セルとF1セルを選択し 更に、E3セルとF3セルも選択し E1セルとF3まとめてセルを結合といったことがしたいです。 質問頂ければ追記しますm(ーー)m おそらくoffsetを使用して選択すると思うのですが上手く出来ませんでした 回答お願い致します

  • VBAで、離れた複数の列に対して処理を施すには?

    VBAでマクロを組んでいたところ、問題が出てきたので質問させてください。 1.任意の列を全選択する(たとえばA列とC列という離れた列です) 2.その列の中でも、すべての行にではなく、数行にだけセル結合解除という処理を施す というマクロを組もうとしています。 しかし、全選択した列の一部の行(画像参照)にだけ処理を施す、というのができません。 1列だけ全選択→セル結合解除、というのはできるのですが、複数の列(しかも列同士が隣り合っていない)に対して処理を施すというのがうまくいかず…。 以下のようにマクロを作成してみたのですが、どこが問題になってるのでしょうか? アドバイスいただけると幸いです。 Sub test1()  Dim intX_1 As Long  Dim intX_2 As Long  Dim rg1 As Range  Dim rg2 As Range  Set rg1 = Range(CStr(ActiveWindow.RangeSelection.Address))  For Each rg2 In rg1 '選択した列のうち、2行目~最後のデータが存在する行まで処理を行う intIX_1 = 2 While rg2(intIX_1) <> "" rg2(intIX_1).MergeCells = False     intIX_1 = intIX_1 + 1 If rg2(intIX_1) = "" Then Exit For End If Wend Next End Sub

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub

  • ExcelのVBAでHTMLのソースのタグの部分を小文字で取得したい

    HTMLのソースコードを取得する下記のVBAを実行すると タグの部分が大文字(<H1>等)になってしまいます。 どうすれば小文字のタグのまま取得することが出来るのでしょうか? 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003 ご存知の方がおられましたらご回答をよろしくお願いします。 Sub sample() Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML MsgBox HTML IE.Quit End Sub

専門家に質問してみよう