- 締切済み
文章が記入されているセルから、URLを抽出
文章の中にURLが記入されているセルがあります。 そのセルから、URLだけを抽出したいです。 URLは、httpsから始まるものだったり、 www.から始まるもの、ドメイン名だけのものなど様々です。 セルからURLを抽出するには、どのような記述でできるでしょうか? よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (772/1616)
どこかの範囲ではなくて、シート全体からですね。 Sheet1のhttps://,http://,www.で始まるものをSheet2に抜き出しています。 Option Explicit ' Sub Macro1() Dim Row As Long Dim Cell As Range ' Sheets("Sheet2").Select [A:B].ClearContents Application.ScreenUpdating = False ' For Each Cell In Sheets("Sheet1").UsedRange ' If Cell Like "https://*" Or _ Cell Like "http://*" Or _ Cell Like "www.*" Then Row = Row + 1 Cells(Row, "A") = Cell.Address(False, False) Cells(Row, "B") = "'" & Cell End If Next Cell End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
#1の補足から、VBAでHyperlinkを探す方法は適当でないと思った。 エクセルのシートのHyperlinkには、URL他に3種あるが URLだけを対象にしてよい、と思った。 残る方法は、文字列セルの文字列から、判定して、抜き出すしかない。 VBScriptなどの、正規表現を用いて、URLを判定したりする例が、正規表現の解説書などに載っているが、相当勉強してないと、利用は無理と思われる。 そこで (1)範囲の全セルを舐める (2)本来VBAのFindメソッドがよいのかもしれないが(全セルを舐めることはしない)、Findは初心者にはむつかしいと思うし、本件では、検索語が複数なので、相当ややこしい。 ーー そこで素朴なInstr関数を用いて、試作例を挙げてみる。 データはSheet1にあるとする。 Sheet2のA列に結果を出す 標準モジュールに Sub test02() h = Array("", "https://", "http://", "www.") ct = Array("", "jp", "com", "net") Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") m = 2 '---- For Each cl In sh1.Range("A1:J100") For j = 1 To UBound(h) p1 = InStr(cl, h(j)) If p1 <> 0 Then For k = 1 To UBound(ct) p2 = InStr(cl, ct(k)) If p2 <> 0 Then 'MsgBox Mid(cl, p1, p2 + Len(ct(k)) - p1) sh2.Cells(m, "A") = Mid(cl, p1, p2 + Len(ct(k)) - p1) m = m + 1 GoTo ex1 End If Next k p2 = Len(cl) 'MsgBox Mid(cl, p1, p2 + Len(ct(k)) - p1) sh2.Cells(m, "A") = Mid(cl, p1, p2 + Len(ct(k)) - p1) m = m + 1 GoTo ex1 End If Next j ex1: Next End Sub (注) sh1.Range("A1:J100")の部分は適当に広げてください。 ーー 実行すると(私の小数例では) Sheet2のA列に https://www.google.ne.jp https://excel-ubara.com https://www.mine-3m.com https://www.google.co.jp http://officetanaka.net ーー 小生の感じた問題点は、 しかし、この後に続く部分も(質問者は)ほしいのかもしれない。 すると、ほしい文字列の、終りの部分の、一般的な判定が、(小生には)難しかったので(省いているので)、このやり方が破綻する。 (1)多数の例・本番の例(多様な例で考慮漏れがあるかも)では、うまくゆくか? (2)多数セルのセル範囲との関係で、実行時間が耐えられるものか? (3)その他の要求 などを感じつつ、参考に。 まだ他の回答が出てないので、簡単な課題ではないのだろうと思う次第。
- imogasi
- ベストアンサー率27% (4737/17069)
下記のWEB記事の件、質問者のニーズに沿わないかどうか、補足のこと。 これぐらい事前に照会して調べて、考えて質問すべきだ。 https://office-hack.com/excel/hyperlink-search/ エクセルのリンク(ハイパーリンク)を検索する2つの方法 ハイパーリンクになってないケースも考えられる。 ーーー この範疇に合わないケースなら、また見つけて、さらに付加して何かしたい場合は説明のこと。
補足
回答ありがとうございます。 URLは全て、ハイパーリンクになっていません。すべてが黒字です。 〇〇〇〇.〇〇というURLだけを別のセルに抽出したいです。
お礼
回答ありがとうございます。 マクロを実行してみましたが、sheet2には3つ程URLが抜き出されてエラーになりました。 意外と難しい例なのかもしれませんね。少しずつ手動でやろうかと思います。 どうも、ありがとうございました。