• ベストアンサー

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

VBAでIEからページをセルに取得するのに、DOMを利用して抜き出します。 その時プロパティで .innerText を使ってテキストを抜き出しています。 ここで質問なのですが、取り出した箇所が2行以上あった場合に、1行ずつ各セルに分ける方法はありますか。

  • mzakom
  • お礼率38% (129/338)

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

  • ベストアンサー
回答No.1

たぶん、ログのテキストの中には、<cr>は、ないのですね。 取り出した箇所が2行以上というのは、どういうスタイルになっているのか、切り分け部分がCRLFなのか、CRか、Spaceなのかは分かりませんが、それを、Split で分けて、配列の変数に入れればよいです。 その後は、ループでセルに1つずつ入れてあげればよいのではありませんか。

関連する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でEXCELから固定長のテキストデータにしたい

    VBAにてEXCELに展開されたデータを固定長のテキストデータに落としたい。 EXCEL側の用件 (1)シート1にボタンを用意して、ボタンをクリックしたらテキストファイルを作成する処理にしたい。 (2)シート2にデータが展開されている。 列は10個程度、行は場合によりけり(MAX65536?) 固定長にする箇所とかはわかるのですが、ボタンクリックしたらシート2を見て、セル(もしくはrange)をどのように取得すればいいのかVBAがよくわからないのです。

  • VBAにて:開いているIEのアドレスを取得するには?

    セルに入力してあるアドレスを利用して、VBAからIEを開き、そのサイトを開くことが出来ます。 ところが、そのアドレスが現在は使われてなくて、 ”お探しのページが見つかりませんでした” と表示されることがあります。 この時、IEをVBAから閉じたいのですが、その判断方法として、 セルのアドレスとIEに表示されているアドレスが異なる ことを利用しようと考えています。 そのために、IEのアドレスの取得方法を知りたいのです。 ご存知の方お願いします。

  • VBAのテキストボックスの表示について

    エクセルでVBAを使っているのですが、作成したフォームのテキストボックスに、セルの[00]や[05]といった形式の値を入れようとすると、[0]や[5]と直されてしまいます。プロパティでうまく設定する方法はありますでしょうか? よろしくお願いいたします。

  • <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オブジェクト変数または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文を使って回避しようと思いましたが、成功しませんでした。 何が悪いと考えられるでしょうか?

  • VBAのテキストフォームの折り返しについて

    こんにちは。 あまりVBAに詳しく無いのですが、会社で必要に迫られ悪戦苦闘しながら開発をしています。 ですので、まだまだ分からない事が多く助けていただきたく質問した次第です。 題名の通り、今EXCELVBAで、 SQLからデータを取得し、シートに挿入。 で、そのシートのデータをコマンドボタンをトリガーにフォームに表示させるようにしているのですが、 UserFormのプロパティから直接WordWrapをTrueにしてもテキストフォーム内でデータが折り返されず、一列で表示されてしまいます。 SQLから取得するときはセルの書式をVBAで以下のように指定し、問題なく出来ました。 Columns("BF:BH").WrapText = True もちろん、セルで表示する場合と、フォームで表示する場合とでは違うのですが、これが原因なのかと思ってしまいます。 原因はなんなのか、対処法はどうしたらよいのか、 もし分かる方がいらっしゃいましたらご教授願えますでしょうか。 分かりづらい文章で大変恐縮ですが、何卒よろしくお願い致します。

  • VBAで「,」⇒「.」へ置換後、タグ区切りでテキスト保存したい。

    VBAで「,」⇒「.」へ置換後、タグ区切りでテキスト保存したい。 お世話になっております。 VBAで下記を行いたいと考えております。 全体の流れとしては、テキストを読み込み⇒エクセル上で編集⇒テキスト保存です。 そのエクセル上で編集⇒テキスト保存で悩んでおります。 編集した複数のシートを、個別にタブ区切りのテキストファイルに保存したいと考えております。 出力する際に、小数点の「,」⇒「.」に変換します。 ※小数点を「,」として利用しています(海外対応) 編集するシートは全てのセルが文字列形式になっており、列も行も読み込むテキストによって可変なので、統一されているわけではありません。 最終行はA列ではなくB列でカウントします。 全てのセルに値が入っているわけではなく、空白もあります。 また、各セルには「0.00000」や「02.24」等の数値も入っており、数値形式にしてしまうと0が消えてしまうので、全てのセルを文字列形式として編集しています。 なお、小数点以下の桁数も可変です。 つまり、小数点が「,」となっているのを「.」になおし、タブ区切りのテキストファイルとして保存したいのです。 出力する際に、いったん別ブックに保存⇒不要なシートを削除⇒タブ区切りで保存はできたのですが、自分があまりVBAに詳しくないせいか、これでは文字列形式で保存されなかったため、シートを新規ブックにコピー⇒タグ区切りで保存に変更しました。 しかし、これではcells.replace ~で置換すると、「00,000」が「0」になってしまいました。 ※「22,222」等は問題ないのですが……何故かは分かりませんでした。 ファイルとしては20000万行~25000行程度です。 列としては40列前後になります。 あまりVBAには詳しくないので、まとはずれな事を言っているかもしれません。 何か良い方法はありますでしょうか? 宜しくお願いいたします。

  • VBAについて

    Excel VBAのUserFormにマルチページ(Page1、Page2、Page3)があります。 Sheet1で1行目のセルを選択した場合は、UserFormのPage1のみを表示 (Page2、Page3は非表示)、 Sheet1で2行目のセルを選択した場合は、UserFormのPage2のみを表示 (Page1、Page3は非表示)、 というようにしたいのですがうまくできません。 どのようにしたらよいのでしょうか。

  • iタウンページのデータを取得(VBA)

    iタウンページからお店の名前、電話番号を抽出するというソフトをVBAで作り、使用しています。 仕組みとしては、 URL(http://~検索キーワード+場所)を aHTML.createDocumentFromUrl(対象URL)し、そのinnertextを取得するというものです。 で、先月まではこの方法で問題なく取得できていたのですが、先週同じように動かしてみましたら、データ取得ができませんでした。 どこが問題なのかと思い、aHTML.createDocumentFromUrl(URL)したオブジェクトの innertextを見てみますと、 「このコンテンツのご利用には最新版のブラウザをお使いください。 お使いのブラウザでは、このコンテンツの動作がサポートされておりません。 新しい機能やコンテンツを快適にご利用いただくために、 最新版のブラウザへのバージョンアップをお願いいたします。 」 という、iタウンページ側のエラーメッセージが出ていました。 iタウンページ側の仕様変更が考えられます。 同様のURLをIEに入力すれば、正常にページを開けるのですが、createDocumentFromUrl を使うとこのように出てしまうのです。 iタウンページが言うように、この方法で使用するブラウザと、PCにインストールされているブラウザは全く違うもので、かつ前者が古いバージョンという事はあり得るのでしょうか。 それが原因である場合、古い方のブラウザを新しいものにバージョンアップする事はできるのでしょうか。 このソフト自体、自分自身でVBAの解説サイトを漁って作ったものなので、VBAの知識は断片的なものしかありませんが、参考URL等教えて頂ければ理解に向け努力します。 よろしくお願いします。

専門家に質問してみよう