ExcelのセルにURLがある場合に、ハイパーリンクを設定したいときは、URLを入力したセルをF2で編集モードにしてEnterすれば自動的にハイパーリンクになります。
しかし、下記画像例のようにハイパーリンクを設定したいURLを含むセルが複数ある場合は、セルの1つ1つをF2で編集モードにしてEnterするのは大変ですよね。
そんなときは、URL化したいセル範囲を選択しながら、下記のコードを実行します。
コードはこちらです。
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
実行結果は下記のようになります。
ちなみにハイパーリンクの一括削除は、該当のセルを範囲選択して、右クリックで「ハイパーリンクの削除」ボタンがあるので、それで一括削除可能です。
右クリックで「ハイパーリンクの削除」ボタンがなぜか出てこない場合は、ハイパーリンクの書式(青字、アンダーライン等)のみが残っている可能性があります。
なお、こちらのコードはこのnoteの有料記事(【無料部分あり】ExcelVBAコードを生成するプロンプトのコツと解説(全19項目)で紹介しているプロンプトでchatGPTで作成しました。
ハイパーリンクを設定したのが、PowerQueryでデータ加工してテーブルに呼び出しているテーブルの列の場合は、データ更新した際にハイパーリンク設定が消えてしまうようです。(アンダーラインやフォントカラー等の書式設定は残ります。)
そのため、PowerQueryでデータ加工してテーブルに呼び出しているURLに、都度ハイパーリンクを設定したい場合には、そのブックをマクロ有効ブックに変更して問題ないのであれば、クラスモジュールでクエリ更新時のイベントプロシージャを利用してURLへのハイパーリンクを設定をするようにできます。
参考:クエリ更新時のイベントプロシージャ
ただし、そのようにする場合は、選択範囲のURLに対してハイパーリンクを設定するのではなく、テーブルの特定列に設定するというコードに書き換えます。