Excel VBAでHTMLのソースのタグの部分を小文字で取得する方法

このQ&Aのポイント
  • ExcelのVBAを使用してHTMLのソースコードからタグの部分を小文字で取得する方法について教えてください。
  • Windows XPおよびMicrosoft Excel 2003を使用し、VBAを実行するとタグの部分が大文字になってしまいます。小文字のまま取得する方法はありますか?
  • 質問者はHTMLのソースコードを取得するVBAを使用しており、タグの部分が大文字になってしまう問題に遭遇しています。小文字のまま取得する方法を知っている方がいらっしゃれば、回答をお願いします。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

パターンに自身はないですが・・・ Sub sample_2() Dim RegExp As Object Dim Match As Variant Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "<\/?[A-Z]+([ 0-9]|>){1}" RegExp.Global = True 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 For Each Match In RegExp.Execute(HTML) HTML = Replace(HTML, Match.Value, StrConv(Match.Value, vbLowerCase)) Next MsgBox HTML IE.Quit End Sub こうゆう感じの事でしょうか?

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >どうすれば小文字のタグのまま取得することが出来るのでしょうか? #1さんのおっしゃるとおり必要ないです。HTMLコードは、タグで挟まれているだけでよいわけで、タグの中の大文字小文字は、関係ないと思います。IE から、ソースを取ればよいのでは? あえて、VBAが分からないのなら、Wordやテキストエディタで置換すればよいと思います。それに、本では読んだことがあるのですが、ソースの二次的利用ではありませんか? もう、回答は出てしまっているけれども、そういう質問というのは、きちんとした理由が必要ではないでしょうか?

  • suo2k
  • ベストアンサー率44% (183/408)
回答No.2

タグといえば < > で囲まれているのがルール。 というわけで< >で抜き出してそれぞれに小文字変換を加えてみるのはどうでしょうか。 ファイルの読み込みとかしたことないので詳しくないのですが、 変数 HTML はstring型でしょうか? HTMLを取得した後、以下のコードを挿入してみるとどうでしょう。 変数宣言は省略。 -------------------------------- tag_start = 0 tag_end = 0 For i = 1 To Len(HTML) moji = Mid(HTML, i, 1) If moji = "<" Then tag_start = i ElseIf moji = ">" Then tag_end = i HTML = Left(HTML, tag_start - 1) & StrConv(Mid(HTML, tag_start, tag_end - tag_start + 1), vbLowerCase) & Right(HTML, Len(HTML) - tag_end) tag_start = 0 tag_end = 0 End If Next i -------------------------------- 文字列から < > を見つけて抜き出して、小文字に変換したものを、 タグ前後の文字と再度くっつけて変換してるように見せます。 これを < > の個数分繰り返します。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

http://www.nishishi.com/blog/2006/01/capital_or_smal.html 大文字でも小文字でも良いルール。 従ってどちらもありえる。 大文字なら小文字に変えれば済むことではないですか。なぜこんな質問が出るのか。 Sub test01() a = "HTML" b = StrConv(a, vbLowerCase) MsgBox b End Sub 参考 http://officetanaka.net/excel/vba/function/StrConv.htm

nana_watuki
質問者

補足

StrConvを使用すると例えば<H1>sampleTEXT</H1>の場合 <h1>sampletext</h1>となってしまいます。 あくまで小文字に変えたいのはタグだけです。

関連する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

  • Excel VBAで検索結果を取得するにはどうしたらいいですか?

    今、Googleの検索結果をコピーして、Excelに貼り付けたいと思って います。 IEで検索するところまで書けたのですが、それ以上がわかりません。 Sub shutoku() With CreateObject("InternetExplorer.application") .Visible = True .navigate ("http://www.google.co.jp/") While .Busy Or .readyState <> 4 DoEvents Wend .document.all.q.Value = "指定のキーワードを入れる" .document.all.btnG.Click End With 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

  • EXCEL VBA で URL内容を 取得できない

    EXCEL VBAで URLの内容を取得しようとしていますが、URLの内容中に FINNAIRの広告ラベル? がトップにでてくる場合には URLの内容が取得できません。広告ラベルが 時々に変更されますが、FINNAIR以外の 広告ラベルの場合は URLの内容を取得できます。 FINNAIRの 広告ラベルも 取得できるようにするには、どうすればいいのでしょうか? FINNAIRの広告ラベルは、短時間のうちに 変化しているようです。なぜ、取得できないのか、まったくわかっていません。 解決方法を教えていただきたく、よろしくお願いします。 Sub IEデータ取得() Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.navigate "http://www.japantimes.co.jp/news/" While (IE.readyState <> 4) Or IE.busy = True DoEvents Wend DoEvents IE.document.body.Focus IE.ExecWB 17, 0 IE.ExecWB 12, 0 Excel.Application.CutCopyMode = False Sheets.Add.name = "Formatテキスト" Range("A1").Select ActiveSheet.PasteSpecial Format:="テキスト" IE.Quit Set IE = Nothing End Sub

  • VBAでソースの一番上から取得するには?

    Sub 取得() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.google.co.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Debug.Print objIE.Document.body.innerHTML Set objIE = Nothing End Sub これだと、 <DIVstyle="DISPLAY:none"id=cst></DIV><TEXTAREAstyle="DISPLAY:none" id=csi></TEXTAREA><SCRIPT>if(google.j.b)document.body.style.visibility='hidden';</SCRIPT> からしか取得されないのですが、 実際のソースを見ると <!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"> で始まってます。 VBAソースのてっぺんから取得する方法を教えてください。 innerHTML以外を使うのでしょうか?

  • ExcelのvbaでHTMLの要素数を出力するには

    webサイト内で、classが"line-name"である要素の数を取得したく、 以下のようなコードを書きましたが、 型が一致しませんとのエラーが出て、うまく走りません。 修正点を教えていただけますでしょうか。 宜しくお願い致します。 -----以下コード----- Sub class数取得() Dim obIE As Object Dim el As Variant Set obIE = CreateObject("InternetExplorer.Application") obIE.Visible = True obIE.navigate "https://www.navitime.co.jp/transfer/railroadlist/?node=00005564&sNa...大宮(埼玉県)" While obIE.readyState <> 4 Or obIE.Busy = True DoEvents Wend Set el = obIE.document.getElementsByClassName("line-name").Length Cells(1, 6).Value = el End Sub

  • Excel の VBA で、IEのWeb操作

    ExcelのVBAで、A1~A10 のセルに入っている数値を下記 URL の「お問い合せ番号」の入力欄に自動でセットして、「検索」のボタンを押したいのですが、方法が分かりません。 http://www2.fukutsu.co.jp/inq/INQJJ120.html 下記のプログラムで表示までは出来るのですが、それから先の入力とボタンクリックの方法が分かりません。 何かアドバイスを頂けると幸いです。 > Dim oIE As Object > > 'IE起動 > Set oIE = CreateObject("InternetExplorer.Application") > oIE.Visible = True > > '目的のURLへ > oIE.Navigate "http://www2.fukutsu.co.jp/inq/INQJJ120.html" > > '完全表示まで待つ > While oIE.Busy: Wend > While oIE.document.readyState <> "complete": Wend

  • DocumentCompleteイベントプロシジャに制御が渡らない

    VB6(VBA)でIEを操作し、表示ページのソースの読込みの確認にDocumentCompleteイベントを使用することを考えています。それで下記のテストプログラムを作成しますたが、DocumentCompleteイベントプロシジャに制御が渡りません。 その原因をご教示して頂きたくお願いします。 Dim WithEvents objIE As InternetExplorer --------------------------------------------------------------- Private Sub CommandButton1_Click() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend objIE.Navigate "http://www.goo.ne.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend End Sub ------------------------------------------------------------- Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "ソースの読込み完了" End Sub

  • オブジェクト変数または With ブロック変数が設定されていません。

    下記の様に組みましたが、下記の★印の所で止まる様な事があります。 毎回止まるわけではないのですが、止まる時に「オブジェクト変数または With ブロック変数が設定されていません。」と表示されますが、 原因は何か?どの様にすればいいのか?など詳しく教えてください。 よろしくお願いします。 Sub test() Dim objIE As Object Dim strCOMMENT As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'データをセットする 'htmlドキュメント フォーム(0番目) アイテムに転記(代入)する objIE.Document.forms(0).Item("username").Value = "11111" objIE.Document.forms(0).Item("password").Value = "11111" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.subm.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'タイトル・コメントの読み込み strtitle = Sheets("sheet1").Range("k7") strCOMMENT = Sheets("sheet1").Range("k9") Application.WindowState = xlMinimized While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.forms(0).Item("title").Value = strtitle objIE.Document.forms(0).Item("comment").Value = strCOMMENT While objIE.readystate <> 4 While objIE.busy = True DoEvents ' Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.submit.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'フォーム(0番目)を .Submit(確認) する objIE.Document.forms(0).getElementsByTagName("input")(11).Click '←★この部分で止まる時があります。 While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 7, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Quit '.Quitで閉じる End Sub

  • エクセルのVBAで最終行までループする方法

    エクセルのVBAで最終行までループする方法を教えてください。 下記がコードになります。 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate Range("A1").Value While objIE.ReadyState <> 4 Or objIE.Busy = True DoEvents Wend Range("B1").value = objIE.Document.all("zoom1").href

専門家に質問してみよう