【ExcelVBA・マクロ】Hyperlinks.Addの使い方|セルにハイパーリンクを自動設定する方法【コピペOK】

ExcelVBA
スポンサーリンク
スポンサーリンク

はじめに

Excelでセルに大量のURLやファイルパスへのリンクを貼りたいとき、1つずつ手作業で「ハイパーリンクの挿入」を行うのは大変です。実は、この作業はVBAのHyperlinks.Addメソッドを使えば数行のコードで自動化できます。

この記事では、Hyperlinks.Addメソッドの基本的な使い方から、表示文字とリンク先を分ける方法、複数セルへの一括設定、既存ハイパーリンクの上書き対策まで、実務で使える形で解説します。

Hyperlinks.Addメソッドの基本構文

Hyperlinks.Addは、WorksheetまたはRangeオブジェクトが持つメソッドで、指定したセル(またはシート上の位置)にハイパーリンクを設定します。基本構文は以下の通りです。

Worksheet.Hyperlinks.Add(Anchor, Address, SubAddress, ScreenTip, TextToDisplay)

主な引数の意味は次の通りです。

  • Anchor: リンクを設定するセル(Rangeオブジェクト)
  • Address: リンク先のURLやファイルパス
  • SubAddress: 同一ブック内のセル・シートを指定する場合に使用(省略可)
  • ScreenTip: マウスを乗せたときに表示される説明文(省略可)
  • TextToDisplay: セルに表示する文字列(省略可、省略時はAddressがそのまま表示される)

基本的な使用例:セルにURLリンクを設定する

まずは、A1セルに指定したURLへのハイパーリンクを設定する基本形です。

Sub AddSimpleHyperlink()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    ws.Hyperlinks.Add Anchor:=ws.Range("A1"), _
                       Address:="https://www.example.com"

End Sub

このコードを実行すると、A1セルにURLがそのまま表示され、クリックするとブラウザでリンク先が開きます。

表示文字とリンク先を分ける方法

URLをそのまま表示すると見た目が煩雑になりがちです。TextToDisplay引数を使えば、セルには分かりやすい文字列を表示しつつ、リンク先は別に指定できます。

Sub AddHyperlinkWithText()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    ws.Hyperlinks.Add Anchor:=ws.Range("A1"), _
                       Address:="https://www.example.com", _
                       TextToDisplay:="公式サイトはこちら", _
                       ScreenTip:="クリックすると公式サイトが開きます"

End Sub

ScreenTipも併せて指定しておくと、マウスホバー時に補足説明が表示されるため、リンク先が分かりにくい場合に親切です。

複数セルに一括でハイパーリンクを設定する

実務では、フォルダ内のファイル名一覧などを取得し、対応するファイルパスへのリンクを一括で設定したいケースがよくあります。ここでは、A列にファイル名、B列にフルパスが入力されている想定で、A列のセルにハイパーリンクを一括設定します。

Sub AddHyperlinksInBulk()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, "B").Value <> "" Then
            ws.Hyperlinks.Add Anchor:=ws.Cells(i, "A"), _
                               Address:=ws.Cells(i, "B").Value, _
                               TextToDisplay:=ws.Cells(i, "A").Value
        End If
    Next i

End Sub

2行目からデータがある前提で、最終行までループしながらB列のパスをリンク先として設定しています。ファイル数が多い場合でも、この方法なら一瞬で処理が完了します。

同じブック内のシート・セルへのリンクを設定する

外部サイトだけでなく、同じブック内の別シートやセルへジャンプするリンクを作ることもできます。この場合、Addressは空文字にし、SubAddressにジャンプ先を指定します。

Sub AddInternalHyperlink()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("目次")

    ws.Hyperlinks.Add Anchor:=ws.Range("A1"), _
                       Address:="", _
                       SubAddress:="'詳細シート'!A1", _
                       TextToDisplay:="詳細シートへ移動"

End Sub

目次シートを作って各シートへのリンクを一括生成すれば、シート数の多いブックでもスムーズに移動できるようになります。

既存のハイパーリンクを削除してから設定する

同じセルに何度もハイパーリンクを設定しようとすると、エラーになる場合や、リンクが重複してしまう場合があります。事前に既存のハイパーリンクを削除してから設定すると安全です。

Sub ReplaceHyperlink(targetCell As Range, newAddress As String)

    If targetCell.Hyperlinks.Count > 0 Then
        targetCell.Hyperlinks.Delete
    End If

    targetCell.Worksheet.Hyperlinks.Add Anchor:=targetCell, _
                                         Address:=newAddress

End Sub

この関数を呼び出す前に、対象セルのハイパーリンクの有無をチェックしてから削除・再設定することで、安全にリンクを更新できます。

まとめ

Hyperlinks.Addメソッドを使えば、セルへのハイパーリンク設定を自動化し、大量のURLやファイルパスへのリンクも一瞬で作成できます。

  • 基本はAnchor(対象セル)とAddress(リンク先)を指定するだけ
  • TextToDisplayで表示文字を分かりやすく調整できる
  • ループ処理と組み合わせれば、一覧表からの一括リンク設定も簡単
  • ブック内リンクはSubAddressを使う
  • 既存リンクはHyperlinks.Deleteで削除してから再設定するとトラブルを防げる

ファイル一覧やリンク集の作成といった定型作業をVBAで自動化して、日々の作業時間を短縮していきましょう。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

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