• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAにてURLの抽出)

エクセルVBAにてURLの抽出

このQ&Aのポイント
  • エクセルVBAのマクロを用いてテキスト(ソースコード)よりURLを取得する方法についてまとめました。
  • 複数のURLを一覧としてエクセル上に出力する方法について説明します。
  • テキストを読み込んでエクセル上にURLを取得する方法をご紹介します。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

正規表現を使って、一致する部分を収集します。 Function GetURL(ByVal HTML As String) As Variant Dim 正規表現 Dim 一致集合_href用 Dim 一致要素_href用 Dim 一致集合_引用符 Dim 一致要素_引用符 Dim 部分列 As String Dim 引用符 As String Dim 位置 As Long Dim 要素数 As Long ReDim URL(0) As String 要素数 = -1 Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Global = True 正規表現.IgnoreCase = True 正規表現.Pattern = "<.*\s+href\s*=\s*" Set 一致集合_href用 = 正規表現.Execute(HTML) 正規表現.Global = False For Each 一致要素_href用 In 一致集合_href用     位置 = 一致要素_href用.FirstIndex + 一致要素_href用.Length     部分列 = Mid(HTML, 位置 + 1)     引用符 = Left(部分列, 1)     Select Case 引用符         Case """"             正規表現.Pattern = "\"""             部分列 = Mid(部分列, 2)         Case "'"             正規表現.Pattern = "'"             部分列 = Mid(部分列, 2)         Case Else             正規表現.Pattern = "[\s>]"     End Select     Set 一致集合_引用符 = 正規表現.Execute(部分列)     For Each 一致要素_引用符 In 一致集合_引用符         要素数 = 要素数 + 1         ReDim Preserve URL(要素数)         URL(要素数) = Left(部分列, 一致要素_引用符.FirstIndex)         Exit For     Next Next If 要素数 >= 0 Then GetURL = URL End Function 呼び出しサンプル Dim T$, A, B, C& T = "<a href = ""http://www.test.co.jp"">" & vbNewLine _  & "<script type=""text/javascript"">" & vbNewLine _  & "<a href='http://www.test2.co.jp'>" & vbNewLine _  & "<script type=""text/javascript"">" & vbNewLine _  & "<a href= http://www.test3.co.jp >" A = GetURL(T) If IsEmpty(A) Then   MsgBox ("URLなし") Else   For Each B In A     C = C + 1     Cells(C, 1) = B   Next End If 正規表現オブジェクト、構文については以下を参照 http://msdn.microsoft.com/ja-jp/library/cc392403.aspx http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

jialess7
質問者

お礼

丁寧な回答ありがとうございます。 非常に助かりました。