エクセルVBAのマクロを用いてテキスト(ソースコード)よりURLを取得したいと考えています。
<a href="**"> 左記の「**」を取得し、エクセル上に
一覧として出力するものを想定しています。
なお、ソース上にhrefのコードは複数存在するので、
それら全てを出力したいのです。
以下が出力希望例になります。
<a href="http://www.test.co.jp">
<script type="text/javascript">
<a href="http://www.test2.co.jp">
出力結果
http://www.test.co.jp
http://www.test2.co.jp
諸事情があり、テキストを読み込んでエクセル上に取得する形式でお願いしたいです。
すみませんが、よろしくお願いします。
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 …
http://msdn.microsoft.com/ja-jp/library/cc392020 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- SEO googleサーチコンソールで、重複URLが多数発生、その修正方法について 2 2023/06/23 16:15
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) Powershell エクセル検索 完全一致の方法 1 2022/06/05 20:19
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- Excel(エクセル) エクセルVBAで図形のテキストを取得してセルに入力 2 2022/10/05 23:09
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スタイルシートで文字色を指定...
-
NからZへの全単射を具体的に構...
-
CSSのセレクタに指定するbodyと...
-
smallにtext-allignが効かない
-
<h1>要素で<img>要素を囲むと無...
-
HTML の繰返し法???
-
【ヒトの神秘】美男美女から何...
-
含む含まないという概念自体の...
-
aの中にspan
-
マージソートの計算量について-...
-
質問1.
-
1から100までの自然数のうち、2...
-
ある要素の中身を全部グレーア...
-
emとstrongの反対
-
「諸要素」とはどういう意味で...
-
input type="hidden"で取得した...
-
初歩的な質問です。<div>のwidt...
-
<br /><hr />どっちを使ったら...
-
改行ほどは行かないけど、若干...
-
CSSで改行後の行間調整
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ヒトの神秘】美男美女から何...
-
含む含まないという概念自体の...
-
角丸画像の背景色を透明にした...
-
smallにtext-allignが効かない
-
マージソートの計算量について-...
-
改行ほどは行かないけど、若干...
-
質問1.
-
テキストボックスの中にリンク...
-
input type="hidden"で取得した...
-
aの中にspan
-
html タグの閉じスラッシュ前の...
-
CSSで改行後の行間調整
-
HTMLページ上でiframeを最前面...
-
HTMLでTextareaを横に2つ並べ...
-
初歩的な質問です。<div>のwidt...
-
スタイルシートで文字色を指定...
-
textareaの幅を画面と合わせたい
-
CSSのa:hoverが急に一部だけ効...
-
NからZへの全単射を具体的に構...
-
アコーディオンメニューの二階...
おすすめ情報