【入門編】【初心者向け】文書内の全ハイパーリンクを検索してURLをテキスト抽出する – Word VBA解析バイブル

スポンサーリンク

こんにちは!Word VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステップから一歩進み、「自分でコードを書いて、Wordを自在に操りたい」と思っているあなたへ。

今回は、業務効率化の現場でも非常によくあるお題、「文書内に散らばるハイパーリンクのURLをすべて抽出し、リスト化する」というテーマを徹底解説します。

「ネットから集めてきた資料、リンクだらけだけどURLだけをきれいに抜き出したい…」
そんな時、手作業で一つずつ右クリックしてコピーしていたら日が暮れてしまいますよね。これを一瞬で終わらせる魔法のVBAコードを、優しく、そして本質からしっかりと紐解いていきましょう。

ここをクリアすれば、Word VBAの「検索(Find)」の仕組みがグッと身近になりますよ。さあ、一緒に扉を開けましょう!

なぜ、Wordの「ハイパーリンク抽出」は一筋縄ではいかないのか?

まず、プログラミング初学者がWord VBAで最初にハマる「大きな壁」についてお話しします。

Excel VBAであれば、セルの値(`Range.Value`)を見れば一発ですが、Wordの構造は少し複雑です。Wordの文書は「本文」「ヘッダー」「フッター」「脚注」など、いくつかのエリア(StoryRangesと呼びます)に分かれています。

さらに、ハイパーリンクは「文字」としてそこにあるわけではなく、文字の裏側に「Field(フィールド)」という特別なデータ構造として隠れています。

そのため、ただ文字を検索するだけではURLを捕まえられません。
「じゃあどうするのか?」
答えはシンプルです。「文書内にあるハイパーリンクのコレクション(Hyperlinks)」を上から順にひとつずつペロリと舐めていく(ループ処理する)のが、最も確実でエレガントなアプローチなのです。

【実践】ハイパーリンクを抽出する全自動マクロ

百聞は一見にしかず。まずは、開発の現場でそのままコピペして使える実用的なコードをお見せします。

このマクロを実行すると、アクティブなWord文書内にあるすべてのハイパーリンクの「表示文字列」と「リンク先URL」を抽出し、新しい文書(あるいはメッセージ)にきれいにリストアップしてくれます。

コピペ用VBAコード

Sub ExtractHyperlinksToList()
‘ 変数の宣言(何を入れる箱かあらかじめ定義します)
Dim docSource As Document
Dim docNew As Document
Dim hl As Hyperlink
Dim count As Long

‘ 処理の高速化と画面ちらつき防止
Application.ScreenUpdating = False

‘ 実行中の文書を「元文書」として記憶
Set docSource = ActiveDocument

‘ ハイパーリンクが1つもなかった場合のガード処理
If docSource.Hyperlinks.count = 0 Then
MsgBox “この文書にはハイパーリンクが見つかりませんでした。”, vbExclamation, “お知らせ”
Exit Sub
End If

‘ 抽出結果を表示するための「新しい文書」を作成
Set docNew = Documents.Add

‘ 新しい文書の最初にタイトルを出力
docNew.Content.InsertAfter “【ハイパーリンク抽出リスト】” & vbCrLf & _
“抽出日時: ” & Now & vbCrLf & _
“————————————————–” & vbCrLf & vbCrLf

‘ カウンターを初期化
count = 0

‘ 【核心部】文書内のすべてのハイパーリンクを順番にループ処理する
For Each hl In docSource.Hyperlinks
count = count + 1

‘ 抽出した「表示文字列」と「アドレス(URL)」を新しい文書に書き込む
‘ vbTabはタブ文字、vbCrLfは改行を表します
docNew.Content.InsertAfter count & “. ” & hl.TextToDisplay & vbCrLf & _
” URL: ” & hl.Address & vbCrLf & vbCrLf
Next hl

‘ 処理完了のメッセージ
Application.ScreenUpdating = True
MsgBox count & “件のハイパーリンクを抽出しました!”, vbInformation, “完了”

End Sub

コードのポイントを優しく解説!

初心者の方でも「このコードが何をしているのか」がクリアに分かるよう、重要な3つのポイントを解説します。

1. `Application.ScreenUpdating = False` (プロの技:画面描画の停止)

コードの最初と最後に、画面の更新をオン・オフする呪文を入れています。
もし文書内に何百個ものハイパーリンクがある場合、画面を1つ書き換えるたびにWordがチラついて処理が遅くなります。「裏側で黙々と仕事をして、終わったら一気に画面を表示する」という、実務では必須のテクニックです。

2. `For Each hl In docSource.Hyperlinks` (今回の主役!)

これが今回のハイライトです。
Word文書全体(`docSource`)が持っているハイパーリンクの集まり(`Hyperlinks`)から、1つずつ取り出して `hl` という変数に代入しています。
「リストの端から端まで、上から順に全部調べる」という、人間で言うと「目視でチェックする作業」を数ミリ秒でやってのけます。

3. `hl.TextToDisplay` と `hl.Address` (宝物の取り出し)

ハイパーリンクというオブジェクトからは、主に次の2つの重要な情報を引き出すことができます。

  • `hl.TextToDisplay`:画面上で青く下線が引かれている「文字(ラベル)」
  • `hl.Address`:その裏側に隠れている「本当のリンク先URL」

これらを組み合わせることで、「どの文字に、どこへのリンクが貼られているか」を完璧に記録できるわけです。

初心者が陥りやすい罠とエラー回避のコツ

Word VBAを書き始めると、必ずと言っていいほどいくつかの壁にぶつかります。ここで先回りして解決策をお伝えしておきますね。

トラブル1: 「オブジェクトが必要です」というエラーが出る

原因の多くは、変数の定義(`Set`句)のし忘れです。
オブジェクト(文書や範囲など)を代入するときは、通常の代入(`=`)ではなく必ず `Set docSource = ActiveDocument` のように `Set` を頭につける必要があります。ここ、本当に初心者が忘えやすいので注意してくださいね!

トラブル2: セルの中やヘッダーにあるリンクが拾えない?

実は、今回のコードの `docSource.Hyperlinks` は、通常の本文だけでなく、表のセルやヘッダー・フッターに隠れているハイパーリンクも一網打尽に拾い上げてくれます
これが、単純な「文字の検索(Find)」を使うよりも `Hyperlinks` コレクションを直接叩く方が圧倒的に優れている理由です。

まとめ:あなたのWord VBAの引き出しが増えました!

お疲れ様でした!今回は、Word VBAを使ったハイパーリンクの抽出という、実務でめちゃくちゃ使えるテーマを解説しました。

  • Wordの構造は少し複雑だが、専用のコレクション(Hyperlinks)を使えば怖くない。
  • `For Each` を使えば、文書全体の要素をスマートに総ナメできる。
  • `ScreenUpdating` で処理を爆速にすることができる。

ここをクリアできたあなたなら、もう「マクロの記録」だけの初心者ではありません立派なVBAプログラマーの第一歩を踏み出しています。

ぜひ、日々の業務の中で「あ、これ手作業でやるの面倒だな」と思うものがあれば、今回のコードをベースに応用してみてください。あなたの手元でマクロが軽快に動き出す瞬間は、最高に気持ちいいはずです。

それでは、次回の応用編でお会いしましょう!

タイトルとURLをコピーしました