1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ExcelVBAで選択範囲のURLに一括でハイパーリンクを設定する

Last updated at Posted at 2024-10-06

ExcelのセルにURLがある場合に、ハイパーリンクを設定したいときは、URLを入力したセルをF2で編集モードにしてEnterすれば自動的にハイパーリンクになります。
しかし、下記画像例のようにハイパーリンクを設定したいURLを含むセルが複数ある場合は、セルの1つ1つをF2で編集モードにしてEnterするのは大変ですよね。

スクリーンショット 2024-10-06 172531.png

そんなときは、URL化したいセル範囲を選択しながら、下記のコードを実行します。

スクリーンショット 2024-10-06 171554.png

コードはこちらです。

ExcelVBA
Sub sb選択範囲のURLをリンクにする()
' アクティブシートの選択範囲内のセルに含まれるURLをハイパーリンクに変換する処理
    
    Dim rngSelected As Range ' 選択範囲を格納する変数
    Dim cell As Range ' 各セルを処理するための変数
    Dim strURL As String ' セル内のURLを格納する変数
    Dim ws As Worksheet ' アクティブシートを格納する変数
    
    ' アクティブシートを取得
    Set ws = ActiveSheet
    
    ' 選択範囲を取得
    Set rngSelected = Selection
    
    ' 選択範囲の各セルをループ処理
    For Each cell In rngSelected
        ' セルの内容がURL形式か確認
        strURL = CStr(cell.Value) ' セルの値を文字列として取得
        If zfIsURLValid(strURL) Then
            ' URLが有効な場合、そのセルにハイパーリンクを設定
            ws.Hyperlinks.Add Anchor:=cell, Address:=strURL, TextToDisplay:=strURL
        End If
    Next cell
    
    Dim myMsg As String 'メッセージボックス用変数
    myMsg = "処理が終了しました。"
    MsgBox myMsg, , "処理結果通知"

End Sub

Function zfIsURLValid(ByVal a_strURL As String) As Boolean
' URLが有効かを確認する関数
' 簡易的なURL形式のチェックを行う
    
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    
    ' URLの正規表現パターンを設定
    With regex
        .Pattern = "^https?://[^\s/$.?#].[^\s]*$"
        .IgnoreCase = True
        .Global = False
    End With
    
    ' URLが正規表現に一致するかを確認
    zfIsURLValid = regex.Test(a_strURL)
End Function

実行結果は下記のようになります。

スクリーンショット 2024-10-06 173320.png

ちなみにハイパーリンクの一括削除は、該当のセルを範囲選択して、右クリックで「ハイパーリンクの削除」ボタンがあるので、それで一括削除可能です。
右クリックで「ハイパーリンクの削除」ボタンがなぜか出てこない場合は、ハイパーリンクの書式(青字、アンダーライン等)のみが残っている可能性があります。

なお、こちらのコードはこのnoteの有料記事(【無料部分あり】ExcelVBAコードを生成するプロンプトのコツと解説(全19項目)で紹介しているプロンプトでchatGPTで作成しました。

ハイパーリンクを設定したのが、PowerQueryでデータ加工してテーブルに呼び出しているテーブルの列の場合は、データ更新した際にハイパーリンク設定が消えてしまうようです。(アンダーラインやフォントカラー等の書式設定は残ります。)
そのため、PowerQueryでデータ加工してテーブルに呼び出しているURLに、都度ハイパーリンクを設定したい場合には、そのブックをマクロ有効ブックに変更して問題ないのであれば、クラスモジュールでクエリ更新時のイベントプロシージャを利用してURLへのハイパーリンクを設定をするようにできます。
参考:クエリ更新時のイベントプロシージャ

ただし、そのようにする場合は、選択範囲のURLに対してハイパーリンクを設定するのではなく、テーブルの特定列に設定するというコードに書き換えます。

VBAを使用せずに、ワークシート関数のHYPERLINK関数を使用して一括でハイパーリンクを設定する方法もあります。
ただし、HYPERLINK関数の場合には、既存のURLが入力された列とは別の列を挿入してHYPERLINK関数を挿入する形になります。(表示文字列は変更可能)

スクリーンショット (6).png

前述の、ハイパーリンクを設定したのが、PowerQueryでデータ加工してテーブルに呼び出しているテーブルの列の場合は、こちらの方法の方が良いかもしれません。
ただし、HYPERLINK関数で表示文字列を指定しないと全く同じURLを表示する列が2列になってしまうので、表示文字列は短く端的に指定するとよいでしょう。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?