• 締切済み

<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 何がまちがっているのでしょうか。

  • fisica
  • お礼率77% (235/305)

みんなの回答

  • Kaneyan-R
  • ベストアンサー率42% (1248/2908)
回答No.1

こんな感じ? Cells(1,1) = htdoc.getElementsByTagName("pre")[0].innerText Set Tag = htdoc.getElementsByTagName("pre") Cells(1,1) = Tag[0].innerText

fisica
質問者

お礼

ありがとうございます。 [0]の[ ]は何か意味があるのでしょうか   

関連するQ&A

  • 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

  • VBAオブジェクト変数またはWithブロック変数

    Access VBAについてお教えください。 VBAを使用しています。下記のようなコードでDOMの値を取得しようと思っています。 If IsNull(IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText) Or _ IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText = "" Then stocker = "" Else stocker = IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText End If IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータがある場合は、 問題なくstockerに値をセットすることができます。 ただし、IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータ(要素)が なにも無い場合は、エラーが発生します。 「実行時エラー91;オブジェクト変数またはWithブロック変数が設定されていません」 IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータが無い場合は、NULLが 帰ってくるとサイトで見かけたので、IF文を使って回避しようと思いましたが、成功しませんでした。 何が悪いと考えられるでしょうか?

  • Excel VBAによるIEの制御に関して

    Excel VBAで以下のようなフレーム構造を持つHTMLページを操作したいと考えています。 (実際はもっと複雑なページですが、簡略化して記載しています) <HTML> <HEAD> <TITLE>ようこそ ○○さん</TITLE> </HEAD> <FRAMESET id=frameset1 border=0 name=TotalFrame frameSpacing=0 rows=48,*,0,0 frameBorder=0> <FRAME name=header src="./Header/Header.aspx" noResize scrolling=no> <FRAMESET id=frameset2 border=0 frameSpacing=0 frameBorder=0 cols=144,*> <FRAMESET id=menuFrame border=0 name=menuFrame frameSpacing=0 rows=22,*,0 frameBorder=0> <FRAME id=option6 name=option6 src=""> <FRAME name=Contents src="./Menu/MenuFrame.aspx" noResize scrolling=no> <FRAME name=sub2 src="" height="0"> </FRAMESET> <FRAMESET border=0 name=mainFrame frameSpacing=0 rows=*,0> <FRAME name=main src="" scrolling=no> <FRAME name=sub src="" height="0"> </FRAMESET> </FRAMESET> <FRAME name=message src="" height="0"> <FRAME name=footer src="" height="0"> </FRAMESET></HTML> このWebページは、メニューフレームに「番号検索」「高度な書誌検索」などの各種メニューボタンがあり、これらメニューボタンをクリックすると、各メニューに対応した検索画面がメインフレームに表示されるというページ構成になっています。 このWebページを開いた時点(デフォルト)では、メインフレームは「高度な書誌検索」画面になっています。 そこで、 (1)メニューフレームの「番号検索」ボタンをクリックしてメインフレームを「番号検索」画面に変更し、続いて、 (2)メインフレームに表示された「番号検索」画面のテキストボックスに値を入力したいと考えています。 (1)メニューフレームの「番号検索」ボタンをクリックし、メインフレームを「番号検索」画面に変更する操作は以下のプロシージャで上手くいきました。    Dim IE As InternetExplorer, htdoc As HTMLDocument, htdoc_frame As HTMLDocument, htdoc_frame_frame As HTMLDocument, anchor As HTMLAnchorElement    Set IE = CreateObject("InternetExplorer.Application") IE.Visible IE.Navigate "http://www.○○○・・・(省略)・・・" Do While IE.Busy Or IE.ReadyState <> 4 DoEvents Loop Set htdoc = IE.Document Set htdoc_frame = htdoc.frames("Contents").Document Set htdoc_frame_frame = htdoc_frame.frames("header").Document For Each anchor In htdoc_frame_frame.getElementsByTagName("DIV") If anchor.ID = "G04" Then 'G04は「番号検索」ボタンに相当するID anchor.Click Exit For End If Next しかし、続く、(2)メインフレームに表示された番号検索画面のテキストボックスに値を入力する操作が、以下のプロシージャでは上手く行きません。 Set htdoc = IE.Document Set htdoc_frame = htdoc.frames("main").Document Set htdoc_frame_frame = htdoc_frame.frames("main").Document Dim txtAreaOutput As HTMLInputElement Set txtAreaOutput = htdoc_frame_frame.getElementsByName("TextBox1")(0) txtAreaOutput.Value = "VBAからの書き込み" 上記プロシージャを実行してもエラーは発生しないのですが、テキストボックスに"VBAからの書き込み"という値が入力されません。 自分でいろいろ調べてみたところ、どうも、(1)の操作で、見た目はメインフレームが「番号照会」画面に変化しているものの、内部的に?はメインフレームが「高度な書誌検索」画面のままであるのが原因のようです。 内部的にも、メインフレームを「高度な書誌検索」画面から「番号検索」画面に変化させるにはどうすれば良いのでしょうか? 非常に判り難い質問かと思いますが、何か判る方がいらっしゃいましたら、教えて頂けると幸いです。

  • 複数タグ指定してHTMLを取得したい

    VBAでMSHTML.HTMLDocumentを使用してWEB上から指定したタグ内のテキストを取得しようとしているのですが、取得したいデータがタグが複数に分かれています。 divの特定クラス内だけなど取得したいのですが、データ1は<h1>データ2は<td>や<p>など、getElementsByTagName(tag)だと、一つしかタグを指定きず、個別に取得するとデータ1とデータ2の関連がバラバラになってしまう為、複数タグを指定して取得できる方法を探しています。 イメージとしてはgetElementsByTagName(tag).Lengthが10の時にh1のタグを発見してそこからh1のinnerTextとtdタグ2つ分のinnerText取得して、またh1タグを発見するまでループして取得するような形に出来ればと思っています。 自作する以外ないのでしょうか?

    • ベストアンサー
    • HTML
  • C# htmlの一部の文字取得

    C#のwebBrowserで表示されているtextを表示させたいです。 htmlが <div class="AAA"> BBB </div> となっており、BBBのtextを取得したい場合、 HtmlElementCollection elem = webBrowser0.Document.GetElementsByTagName("div");   foreach (HtmlElement element in elem)   {    if (element.GetAttribute("class") == "AAA")  {  str = element.InnerText;  } } と、しましたが、上手く取得出来ません。 ご教授頂ければ助かります。

  • エクセルVBAについて

    エクセルVBA初心者です。 左の表からある一定以上の売上を得た人を抽出し、右の表に表示したいのですが以下のプログラムだと上手くいきません。 どこがダメなのでしょうか? Private Sub cmdUriken_Click() Dim k As Integer Dim l As Integer Dim m As Integer k = 2 l = 2 m = 2 Do Until Cells(m, 32) = "" Range(Cells(m, 19), Cells(m, 34)).Select Selection.ClearContents m = m + 1 Loop Do Until Cells(k, 14) = "" If Cells(k, 14) >= txtUriken.Text Then Range(Cells(k, 1), Cells(k, 16)).Select Selection.Copy Range(Cells(l, 19), Cells(l, 34)).Select ActiveSheet.Paste l = l + 1 Application.CutCopyMode = False End If k = k + 1 Loop End Sub ちなみに If Cells(k, 14) = txtUriken.Text Then とするとちゃんと同等の売上が表示されるので >= の使い方が間違っていると思うのですが よろしくお願いします。

  • 【至急】VBAを使ったHTTPタグの取得方法

    どなたか助けていただけないでしょうか? 以下の構文で、特定のHTTPタグの中身(テキスト)を抽出してます。 ですが、同じタブがあると以下の構文では一部しか抽出できません。 全てを抽出しExcelに出力したいのですがどのように記述すればよろしいでしょうか? ※やりたいこと タブの内容をエクセルに出力 1つめ Set rURLa = rURLa.Offset(1)  へ出力 2つめ Set rURLa = rURLa.Offset(2)  へ出力 3つめ Set rURLa = rURLa.Offset(3)  へ出力 Private Sub CommandButton1_Click() Dim aURLa As String Dim l As Object Dim TL As Object Set rURLa = Range("B4") Do If rURLa = "" Then Exit Do Dim oIE As Object Set oIE = CreateObject("InternetExplorer.Application") oIE.Navigate rURLa Application.Wait [Now() + "0:00:10"] '10秒待つ While oIE.Busy Or oIE.ReadyState <> 4 DoEvents Wend For Each TL In oIE.Document.getElementsByTagName("div") 'spanタグを探す If TL.GetAttribute("class") = "title" Then 'class="title"なら rURLa.Offset(, 1) = TL.innerText Set rURLa = rURLa.Offset(1) End If Next oIE.Quit Set oIE = Nothing Loop MsgBox "リンク抽出完了" End Sub

  • 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のresponseTextのエラー

    標題の件で、エクセルのマクロでMSXML2を用いて"モーニングスター [ PTS値上がり率株式ランキング]"というサイトの1ページ目のテーブル内のコード、銘柄名、基準比の値を取得したいのですが"write .responseText"で"システムエラー 1072896658 VBA"が発生してしまい、プログラムをどう修正すればいいか分からずに困っております。 【開発環境】 windows10 Home エクセル2010 Internet Ecplorer11 【備考】 http://q.hatena.ne.jp/1403712526 "ExcelのVBAで、「e-hon」というサイトのhtmlを取得しようとするとエラーが出ます。"の回答にあるHTML = StrConv(http.responseBody, vbUnicode)はできましたが、 HTMLの中身に取得したいテーブルの内容がDebugPrintで含まれていないことを確認し、他の方法でどう対応すればいいか分からずに行き詰っています。 【プログラム】 ※以前に質問したhttps://okwave.jp/qa/q9320858.html"エクセルMSXML2で株価取得"の回答とほぼ同じプログラムです ' ' // Option Explicit #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If 'モーニングスターPTS値上がり率1ページ目URL http://www.morningstar.co.jp/StockInfo/pts/ranking?kind=0&page=0 'モーニングスターテーブルclass名:sr-tbl 'VBEにて参照設定(MSXML2.XMLHTTP):Microsoft XML, v3.0、Microsoft HTML Object Library Sub MORNINGSTAR_PTSneagari() Dim i1 As Long 'エクセル初期入力行 Dim j1 As Long 'エクセル初期入力列 Dim i2 As Long '処理済レコード数 Dim j2 As Long 'テーブル上のカレント列Index Dim objXML As New MSXML2.XMLHTTP Dim htmlDoc As Object Dim objTable As MSHTML.HTMLTable 'HTMLテーブルオブジェクト Dim objCell As MSHTML.HTMLTableCell 'HTMLテーブルセルオブジェクト Application.Cursor = xlWait 'カーソル砂時計 i1 = 3 'シート行開始位置 固定値 j1 = 1 'シート列開始位置 固定値 i2 = 0 '初期化 j2 = 1 '初期化 Set htmlDoc = New MSHTML.HTMLDocument With objXML .Open "GET", "http://www.morningstar.co.jp/StockInfo/pts/ranking?kind=0&page=0", False 'URL入力 .send (Null) htmlDoc.write .responseText End With Sleep (10) ' ' tableタグを総当たりにして、クラス名がヒットしたらobjTable に <table class="sr-tbl"> がセットされた状態でループを抜ける For Each objTable In htmlDoc.getElementsByTagName("table") If objTable.className = "sr-tbl" Then Exit For Next For Each objCell In objTable.getElementsByTagName("td") j2 = j2 + 1 If j2 = 2 Then Cells(i1 + i2-1, j1) = objCell.innerText ElseIf j2 = 3 Then Cells(i1 + i2-1, j1) = objCell.innerText ElseIf j2 = 4 Then Cells(i1 + i2-1, j1) = objCell.innerText ElseIf j2 = 7 Then Cells(i1 + i2+1, j1) = objCell.innerText ElseIf j2 = 8 Then Cells(i1 + i2+1, j1) = objCell.innerText ElseIf j2 >= 10 Then j2 = 0 i2 = i2 + 1 End If Next Set objTable = Nothing: Set htmlDoc = Nothing: Set objXML = Nothing '初期化 Application.Cursor = xlDefault 'カーソル矢印 End Sub ' ' // ご教授お願いいたします。

  • エクセルからテキストファイルはきだし

    エクセルのひとつのシートの内容をテキスト形式で吐き出すマクロを教えてください。 エクセルでHTMLメルマガの商品名や金額を編集できるようにしたいのですが、その編集後のファイルをテキストで出すマクロのVBAの書き方を教えてください。 現在、以下で書いておりますがエクセルの中にある「$」が消えてしまいます。$が消えないような書き方を教えてください。また、""が余分についてしまう書き方は避けたいです。よろしくお願い致します。 Sub test() Dim StrFN As String StrFN = ActiveWorkbook.Path & "\data.txt" Dim i As Long, LngLoop As Long Dim IntFlNo As Integer Worksheets("HTML").Activate LngLoop = Range("a65536").End(xlUp).Row IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 1 To LngLoop Print #IntFlNo, Cells(i, 1) Next i Close #IntFlNo End Sub

専門家に質問してみよう