VBAを使ってHTMLファイルの読み込み、タグで囲まれたテキストを無くす処理

このQ&Aのポイント
  • Word2013、Windows7の環境で、VBAを使ってHTMLファイルを読み込み、指定タグで囲まれたテキストを無くす処理を行う方法について解説します。
  • 実際のHTMLファイルとVBAで読み込んだ結果が異なる理由や、勝手にclass属性が追加される問題についても触れます。
  • さらに、HTMLファイルを読み込んで編集する際に注意するべきポイントや、解決策についても紹介します。
回答を見る
  • ベストアンサー

HTMLファイルの読み込み

Word2013、Windows7の環境で、VBAを使って、 Htmlファイルを読み込み、指定タグで囲まれたテキストを無くす処理を下記プログラムでやっています。 ---------------------------------------------------------------------------- Sub Prc() Dim startTag As String, endTag As String Dim objXML As New MSHTML.HTMLDocument Dim htmlDoc As New MSHTML.HTMLDocument Dim objITEM As Object startTag = "<header>" endTag = "</header>" Set htmlDoc = objXML.createDocumentFromUrl("file:///" & "C:\Work\index.html", vbNullString) Call untilReady(htmlDoc) For Each objITEM In htmlDoc.all If Left(objITEM.outerHTML, Len(startTag)) = startTag Then objITEM.outerHTML = startTag & endTag End If Next End Sub ---------------------------------------------------------------------------- プログラムで読み込んだ結果と実際のHTMLファイルの中身が異なり、class属性が勝手に追加されたりして、 原因がわからなくて、ご教授をお願いいたします。 ・実際のHtmlの中身 <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8" /> ....... ・読み込んだ結果 <!DOCTYPE html> <html class="js non-mobile" lang="en" dir="ltr"> <head> <meta charset="utf-8" /> .......

  • HTML
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • angel2015
  • ベストアンサー率21% (126/590)
回答No.1

htmlタグにclass属性を勝手に追加するのはワードやエクセルの仕様ですね 何のためにやってるのかは知らないですけど 実害がなければそういうものだと思っておいてください

関連するQ&A

  • HTML5で再構築にて

    HTMLの勉強は始めたばっかりです XHTMLからHTML5に切り替える時に、テキストソフトをメモ帳からCrescent Eveに変えたのですが、 Crescent Eveの、自動文法チェックでエラー表示します エラー内容→(要素h1はこの位置に置けません)(要素pはこの位置に置けません) 理解できません ご教授お願いします ※サンプル <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title></title> <style> </style> </head> <body> <header> <h1></h1> <p></p> </header> </body> </html>

  • エクセルMSXML2で株価取得

    標題の件で、エクセルのマクロでMSXML2を用いて"株探"というサイトの"本日、年初来高値を更新した銘柄"の全ページのテーブル(stock_table)内の<td>の値をエクセルに取得したいのですが、エラーが解決できないのでどう直せばいいか困っています。 【参考サイト、備考】 エクセルの神様 > マクロVBA > マクロVBAサンプル集 > WEBデータの取得方法 http://excel-ubara.com/excelvba5/EXCELVBA222.html のサイトのSample3(MSHTML.HTMLDocument)を参考にして書いたときは動作をしましたが複数ページ読み取る際にマクロがフリーズしてしまい、同サイトのSample4(MSXML2.XMLHTTP+MSHTML.HTMLDocument)で書き直そうとして上手くいかず、エラーで止まってしまう状態です(オブジェクトの操作がよく分かってないです) 【プログラム】 ' ' // 'スリープ設定 #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 '株探新高値1ページ目URL https://kabutan.jp/warning/?mode=3_3&market=0&stc=&stm=0&page=1 '株探テーブルclass名:stock_table 'VBEにて参照設定(MSXML2.XMLHTTP):Microsoft XML, v3.0、Microsoft HTML Object Library Sub kabutan_shintakane() Dim i1 As Long 'エクセル現在入始行 Dim j1 As Long 'エクセル現在入力列 Dim i2 As Long 'テーブル行 Dim j2 As Long 'テーブル列 Dim Judge As Long '処理終了判定 Dim URLpage As Long 'URL現在ページ番号 Application.Cursor = xlWait 'カーソル砂時計 i1 = 2 'シート行開始位置 j1 = 3 'シート列開始位置 Judge = 10 URLpage = 1 'URL開始ページ番号 Do While Judge > 1 i2 = 0 '初期化 j2 = 0 '初期化 Dim objXML As New MSXML2.XMLHTTP Dim htmlDoc As Object Set htmlDoc = New MSHTML.HTMLDocument Dim objTable As HTMLDocument 'HTMLテーブルオブジェク Dim objITEM As Object 'HTMLセルオブジェクト With objXML .Open "GET", "https://kabutan.jp/warning/?mode=3_3&market=0&stc=&stm=0&page=" & URLpage, False 'URL入力 .send (Null) htmlDoc.write .responseText End With Sleep (10) Set objTable = htmlDoc.getElementsByClassName("stock_table")(0) '←型が合わなくてエラーになります For Each objITEM In htmlDoc.getElementsByTagName("td") Cells(i, j) = objITEM.innerText j = j + 1 If j > 10 Then j = 1 i = i + 1 End If Next i1 = i1 + objTable.Rows.Length - 1 '次のシート行位置 Judge = objTable.Rows.Length 'URL次ページ読み取るか判定 URLpage = URLpage + 1 '次のページ位置 Set objXML = Nothing '初期化 Set htmlDoc = Nothing '初期化 Set objTable = Nothing '初期化 Set objITEM = Nothing '初期化 Loop Application.Cursor = xlDefault 'カーソル矢印 End Sub ' ' // ご教授お願いいたします。

  • 起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?

    【環境・言語】Windows XP + IE6 + Visual Basic 2008 既に起動しているInternet ExplorerのオブジェクトをShellWindowsから探して、SHDocVw.InternetExplorer型の変数(objIE)に代入してあります。   Dim objIE As SHDocVw.InternetExplorer   'ShellWindowsから目的のIEオブジェクトを探してobjIEに代入 ここから、mshtml.HTMLDocumentを取得するところまでは分かります。   Dim objDoc As mshtml.HTMLDocument = CType(objIE.Document, mshtml.HTMLDocument) これではなくて、.NET FrameworkのHtmlDocumentクラス(System.Windows.Forms名前空間)のオブジェクトを取得することはできるでしょうか? ↓のように無理やりやってみたら、   Dim objDoc2 As System.Windows.Forms.HtmlDocument = CType(objIE.Document, System.Windows.Forms.HtmlDocument) ↓のようなエラーが出ました。   System.InvalidCastException はハンドルされませんでした。   Message="型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型 'System.Windows.Forms.HtmlDocument' にキャストできません。COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。" mshtml.HTMLDocumentを使ってHTMLを解析していくと、COMオブジェクトの解放が大変そうなので、できれば.NET Frameworkの中で操作したいと思っています。逆(.NET Framework→COM)はHtmlDocument.DomDocumentで簡単に出来るようですが、COMから.NET Frameworkへの変換は出来ないんでしょうか?

  • PHPで動的にHTMLを出力したときの現象

    サーバは自分で立てたcentOS5.4(i386版)を使用しており、そこでホームページの作成をしております。 ホームページは、PHP5+XHTML+CSS+JavaScriptを使用しており、それぞれ別ファイルで作成してあります。 アクセス先はPHPで、そのPHP内にテンプレートを表示する処理を記述してあるのですが、PHPで動的に表示した状態のソースを見ると、生のHTMLの内容と違った状態で表示されてしまいます。 生のHTMLと動的に出力したHTMLのソースは下記の通りです。 生のHTML ================= <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr"> <head> ・ ・ ・ 動的のHTML ================= ?????????<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr"> ・ ・ ・ 動的に出力した状態ですと、ソースの最初に"?????????"という文字が表示されてしまいます。 PHPやHTMLなど、全てのファイルは 文字コード:UTF-8 で、HTMLとCSSは 改行コード:CRLF で、その他のPHPやJavaScriptは 改行コード:LF で作成しております。 php内では、 まずテンプレートを"openFile"で開き、 文字列置換($bodyはテンプレートファイル) $body = str_replace("\\", "\\\\", $body); $body = str_replace("\"", "\\\"", $body); eval("\$body = \"$body\";"); をして、最後に mb_http_output("UTF-8"); header("Content-type: text/html;charset=UTF-8"); print($body); としてあります。 文字コードの関係で文字化けを起こしているため、最初に"?????????"とソースに表示されてしまっているのかと思うのですが、どこが原因なのか分かりません。 原因がお分かりになる方、同じ現象になったことのある方いらっしゃいましたら、ご教授のほどお願い致します。

    • ベストアンサー
    • HTML
  • フリーズする原因

    参照設定で[Microsoft HTML Object Library] Sub test1() Dim html As MSHTML.HTMLDocument Set html = New MSHTML.HTMLDocument Dim document As MSHTML.HTMLDocument Set document = html.createDocumentFromUrl("http://www.goo.ne.jp/", vbNullString) ' ダウンロード待ち Do While document.ReadyState <> "complete" Loop ' 結果出力 Debug.Print document.Body.innerHTML Set html = Nothing Set document = Nothing End Sub このコードを実行したいのですが ステップインして行かないとフリーズしてしまいます。 「ダウンロード待ち」の部分で無限ループです。 なぜでしょうか? あと、ステップインで実行したとしても 「このページには、セキュリティの危険性がある可能性があります。続行しますか?」 が毎回出てくるのですが、 非表示にするかvbaで「はい」にさせる方法はありますか?

  • メールに出てきた文字列の現象の意味と理由は? 

    こちらからOutlook Expressを使って送信したメール(****より下、ヘッダー下の部分) に対する返信メールを受信したら、下記(*****より下)のように表示されました。 ▲△◎▽#はメールの文言で、ここに載せる際、当方が伏字にしました。 原文は文字化けはしておらず、普通に読めました。 (1)メールの文言以外に、なぜこんな文字列が出たのか教えて下さい。 (2)先方もPCでOutlook Expressで返信してきているはずなのですが、 実は「携帯を使ってWebメール経由で送られたメール」なのでしょうか? (3)返信メールのトップにでてきた、 text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit というこの意味と、この表示が出た理由も知りたいです。 (4)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> などの文字列の意味と、どうしてこれが出てきたのか、その理由も知りたいです。 (5)返信してきた先方には、こんな表示のメールになっていることは 知らせていないのですが、気づいているのでしょうか? それともわからないものでしょうか? 詳しくないので、回答が重複するような質問ばかりかもしれませんが、 詳しい方にぜひ詳細を教えていただきたいです。 よろしくお願いします。 *************************************************** text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit ▲▲ △△△△△△△ ◎◎。▼▼▼▼▼▼ ________________________________ From: ●●●● [mailto:XXXX@XXXX.ne.jp] Sent: Wednesday, September 12, 2007 9:28 PM To: ■■■■ Subject: ###### ------=_NextPart_000_0002_01C7F586.1B304700 Content-Type: text/html; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=iso-2022-jp"> <META content="MSHTML 6.00.2800.1597" name=GENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=#ffffff> <DIV dir=ltr align=left><FONT color=#0000ff size=2>▲▲</FONT></DIV> <DIV dir=ltr align=left><FONT color=#0000ff size=2> △△△△△△△</FONT></DIV> <DIV dir=ltr align=left><FONT color=#0000ff size=2></FONT>&nbsp;</DIV> <DIV dir=ltr align=left><FONT color=#0000ff size=2>◎◎。▼▼▼▼▼▼!!</FONT></DIV><BR> <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"> <DIV class=OutlookMessageHeader lang=ja dir=ltr align=left> <HR tabIndex=-1> <FONT face=Tahoma size=2><B>From:</B> ●●●● [mailto:XXXX@XXXX.ne.jp] <BR><B>Sent:</B> Wednesday, September 12, 2007 9:28 PM<BR><B>To:</B> ■■■■<BR><B>Subject:</B> <BR></FONT><BR></DIV> <DIV></DIV> <DIV><FONT size=2>######

  • 文字化けしていたHTMLファイル

    Windows 8.1 秀丸 8.34 HTML 4.01のコードです。 ある日秀丸でHTMLファイルを開いてみたら、日本語の部分が文字化けしてしまっていました。 どの文字タイプを指定しても解消しません。 今思えば、以前ファイルを保存する時に変な保存の仕方をしたかもしれません。 (もしかしたら文字化けさせたまま保存させてしまったかも) HTMLファイルの時点で文字化けしているファイルを元に戻す方法は有りませんか? どのブラウザのエンコードも全く意味ないです。 いくつかのエディタでも駄目でした。 文字タイプに影響していそうなHTMLコードを引用しておきます。 ---------------------------------------------------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/Transitional.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" Content="text/html;charset=Shift_JIS"> css側 charset "Shift_Jis"; -----------------------------------------------------------------------------------

  • HTTPサーバーへPOST要求を送信について

    はじめまして、ひろです。 VisualBasic 2008 .NETでHTTPサーバーへPOST要求を送信する プログラムを作成しているのですが、うまく動作しません。 仕様書でクライアントからサーバーへ 要求URL:https://ABC.co.jp 要求HEADER:POST https://ABC.co.jp HTTP/1.0 要求BODY:A=1234 POST要求するよう指示されているのですが、 下記のようなプログラムではERRORが返ってきます。 問題ある箇所がわかる方いらっしゃたら、 教えてほしいのですが。 よろしくお願いします。 Sub aaabbb() Dim objXML As Object Dim strXMLDoc As String Dim intRet As Integer Dim strURL As String Dim strKey As String strURL = "https://ABC.co.jp" strKey = "A=1234" objXML = CreateObject("MSXML2.ServerXMLHTTP") objXML.open("POST", strURL, False) objXML.send(strKey) strXMLDoc = objXML.responseText intRet = objXML.status objXML = Nothing End Sub

  • HTMLについて

    サイト作りをしているのですが、理想は右にメニューがあって、左にページが開くというものです。 メニューに出きてほしいHTMLと画面を二分割にするHTMLは出来ているのですが、画面を二分割にするHTMLを打ち込んだ後、どこにメニューに出てきて欲しいHTMLを打ち込めばいいのか分かりません。 何処に入れればいいのかを教えて下さい。 あと、メニューに出てきて欲しいHTMLの前には何か特別なHTMLは必要なのでしょうか? 例:<target name="a">又は<div name="a"> ↓画面を二分割にするHTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>L・L・B</title> </head> <frameset cols="270, 370"> <frame src="a" name="meun"> <frame src="b" name="main"> <noframes> </noframes> </frameset> </html>

  • エクセルVBAでHTMLへの書き出し 余分なダブルクォーテーションが消したい

    お世話になります。 現在下記のようなVBAを組んでみて、なんとかエクセルの複数シートを一括でHTMLとして出力できないか試行錯誤しています。 しかし、どうしても各文字列がダブルクォーテーションで囲まれてしまい、かつ、HTML上に本来存在していてもらわないといけないダブルクォーテーションが2重になってしまう(本来一個あればOKなところに余分にもう一個ついてしまう)という状態です。 おそらくマクロの中身が思いっきり違うのだろうと思うのですが、いかんせんよく分かりません。以下に実際の中身とその結果出てきてしまったものを記載しますので、なにとぞ、ご教授をお願いいたします。 ■実際に使っているマクロの中身 Sub Test() Dim ws As Worksheet On Error Resume Next For Each ws In ActiveWorkbook.Worksheets ws.SaveAs ThisWorkbook.Path & "\" & ws.Name & ".html", xlUnicodeText Next ws End Sub ■結果として出力されてしまうHTML(まがいの何か) "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">" "<html lang=""ja"" dir=""ltr"">" <head> "<meta http-equiv=""Content-Type"" content=""text/html; charset=Shift_JIS"">" "<meta http-equiv=""Content-Style-Type"" content=""text/css"">" "<meta http-equiv=""Content-Script-Type"" content=""text/javascript"">" "<link href=""css/style.css"" rel=""stylesheet"" type=""text/css"" media=""screen, tv"">" "<script type=""text/javascript"" src=""/common/js/search.js""></script>" ■本当はこうしたいHTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <link href="css/style.css" rel="stylesheet" type="text/css" media="screen, tv"> <script type="text/javascript" src="/common/js/search.js"></script> 以上となります。

専門家に質問してみよう