• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでメタタグを抽出するには?)

エクセルでメタタグを抽出する方法

このQ&Aのポイント
  • エクセルシートのB列にURLが並んでいるとして、VBAAを使って、C列にはdescription、D列にはkeywordsを抽出する方法について知りたいです。
  • 以前、質問した内容はB列にURLが並んでいて、A列にタイトルを抽出する方法でした。
  • VBAAの知識がなく、URLの一覧があるB列にタイトル、C列にdescription、D列にkeywordsを抽出する方法について教えてください。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

torasan117さん こんにちは。 HTMLの記述は自由(スペースや改行等々)なのと、文字コード(S-Jis,UTF8等々)の違いもあり 各サイトを確認しないと、きちんとしたデータを収集できないかも知れません。 一応サンプルを作成してみましたが、うまくいかない時は自分で修正して欲しいのですが 「VBAの知識がない」とのことで厳しいかも知れません。 今回はdescription、keywordsの取得がタイトル取得より面倒なので「正規表現」を使用しました。 正規表現のパターン(抽出条件?)を理解すれば修正も可能かと思います。 Public Sub ReadTitle() Dim url As Range Dim Http, buf As String Dim re, mc Set Http = CreateObject("MSXML2.XMLHTTP") Set re = CreateObject("VBScript.RegExp")    Set url = Range("B1") Do While (url.Value <> "")  Http.Open "GET", url.Value, False  Http.Send  buf = StrConv(Http.ResponseBody, vbUnicode)  buf = Replace(buf, vbCr, " ")  buf = Replace(buf, vbLf, " ")  With re   .IgnoreCase = True   .Global = True   .Pattern = "<title>(.*?)</title>"   Set mc = .Execute(buf)   If mc.Count <> 0 Then url.Offset(0, -1) = mc(0).SubMatches(0)   .Pattern = "meta\s+?name.*?description.*?content=.*?['""](.*?)['""]"   Set mc = .Execute(buf)   If mc.Count <> 0 Then url.Offset(0, 1) = mc(0).SubMatches(0)   .Pattern = "meta\s+?name.*?keywords.*?content=.*?['""](.*?)['""]"   Set mc = .Execute(buf)   If mc.Count <> 0 Then url.Offset(0, 2) = mc(0).SubMatches(0)  End With  Set url = url.Offset(1, 0) Loop Set Http = Nothing Set re = Nothing End Sub

torasan117
質問者

お礼

回答ありがとうございます。 思っていたことが出来ました。 本当に感謝します。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

列Cのdescription、列Dのkeywordが列Bにどのような記述をされているのか? 前質問の#1さんの回答のとおりですが、コードを列挙するよりも列Bを例示しないと難しいですよ。