Excelには、ハイパーリンクを設定する「HYPERLINK」という名前の、ワークシート関数が存在しています。
引数を2つ指定できる関数で、第1引数・リンク先にはURLを指定し、第2引数・別名にはセルに表示する文字列を指定します。
リンク先のURL等を取得するユーザー定義関数
この逆を行う関数が必要になり、VBA(Visual Basic for Applications)でユーザー定義関数を作りました。
セルにハイパーリンクが設定されているときに、リンク先のURLか、セルに表示されている文字列を返す関数です。
セル As Range, _
Optional 別名 As Boolean = False) As String
' ハイパーリンクされているセルから文字列・アドレスを返す
' 引数:セル=ハイパーリンクを含むセル
' 引数:別名=TRUE=セルに表示されている文字列, FALSE=アドレス
With セル.Hyperlinks(1)
Select Case 別名
Case True
HYPERLINK_REV = .TextToDisplay
Case False
HYPERLINK_REV = Replace(.Address, "mailto:", "")
End Select
End With
例えば、A1セルにハイパーリンクが設定されているときに、どこかのセルに、
=HYPERLINK_REV(A1, TRUE)
と入力すると、セルに表示されている文字列が返され、
=HYPERLINK_REV(A1, FALSE)
または、
=HYPERLINK_REV(A1)
と指定すると、リンク先のURLが返されます。
ユーザー定義関数の解説
ハイパーリンクはExcel VBA的にはRangeオブジェクトのHyperlinkオブジェクトです。
HyperlinkオブジェクトのAddressプロパティでURLを、TextToDisplayプロパティで文字列を取得できます。
引数・セルで渡されたRangeオブジェクトから、Hyperlinkオブジェクトを取得して、
With セル.Hyperlinks(1)
引数・別名にTrueが指定されたときは、Hyperlink.TextToDisplayプロパティで取得できる、表示されている文字列を返し、
Select Case 別名
Case True
HYPERLINK_REV = .TextToDisplay
引数・別名がTrueだったときは、Hyperlink.Addressプロパティで取得したアドレスを返します。
Case False
HYPERLINK_REV = Replace(.Address, "mailto:", "")
なお、電子メールアドレスにハイパーリンクが貼られている場合、先頭に付加される「mailto:」という文字列が邪魔でしたので、Replace関数を使って文字列「mailto:」を空白文字列に置換する処理を入れています。
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » ハイパーリンクのリンク先URL等を取得するユーザー定義関数