PR

【VBA】ハイパーリンククリック時に処理を行う方法など

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
ハイパーリンクは便利な機能なので利用頻度も多いと思いますが、そのハイパーリンクに関連した処理として、クリックした際に処理を行うFollowHyperlinkイベントやハイパーリンクアドレスを取得してセルに書込みを行う方法などについて今回は書いていきたいと思います。

スポンサーリンク

1.サンプル概要/サンプルコード

◆ハイパーリンククリック時に処理を行う

Sheet上のハイパーリンクをクリックした際に、そのハイパーリンクに設定されたアドレスを取得しメッセージボックスに表示します。

先ずハイパーリンクをクリックします。

クリックすると、ハイパーリンクに設定されているアドレスをメッセージボックスで表示します。

 

次にこの部分が特殊なのですが、メッセージボックスと並行して処理が進行しリンク先も表示されます。なので、メッセージボックス上の「OK」のクリック待ち⇒リンク先を開く…のような形にはならないという点を知っておくと良いと思います。

このようにハイパーリンクをクリックしたときに処理を行うにはFollowHyperlinkイベントを使用します。

【構文】

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
statements
End Sub

このFollowHyperlinkイベントは処理対象とする「シートモジュール」(赤枠)に記述します。

引数の「Target」はクリックされたハイパーリンクを表していますので、そのTargetのAddressを取得してメッセージボックスに表示するという流れになります。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
'↑ハイパーリンクをクリックした際に処理を実行↑

   'クリックされたハイパーリンクのアドレスを取得し表示する
   MsgBox "URL:" & Target.Address & "へ移動します", vbInformation
   
'※FollowHyperlinkイベントはハイパーリンクをクリックした際に
'  処理を実行しますが、リンクの実行と同時進行処理になるので、
'  メッセージボックス表示と併せてリンク先も表示されます。
' リンク実行のキャンセルは出来ません。

End Sub

コメントにも記載していますが、このFollowHyperlinkイベントはリンク実行のキャンセルが出来ないようです。なので、ハイパーリンクに設定されたアドレスのみを取得したい場合については以下の方法もあります。

◆ハイパーリンクに設定されたアドレスを取得する

こちらはSheet上の範囲(B列)を指定して、その範囲内にあるハイパーリンク有無を確認して「設定有り」であれば右隣(C列)に記入するものです。

サンプルとしてB列の文字列「サンプル1」「サンプル3」「サンプル5」にリンク設定、「サンプル2」と「サンプル4」は無しにしています。

サンプルコードを実行すると以下の通り、右側にアドレスを書き込みます。

Sub Sample1()

'**ハイパーリンク設定されたアドレスを取得して
'  右隣のセルへ書込みを行う**

  Dim Link_cell As Range
  
  'ハイパーリンクが設定されているセルB列範囲を選択
  Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Select
    
  '選択範囲に対し処理を実行
  For Each Link_cell In Selection
     'ハイパーリンク設定有無の確認
     If Link_cell.Hyperlinks.Count <> 0 Then
        '設定有り⇒アドレス取得し右隣り(C列)に記入
        '設定なし⇒スルー(何もしない)
        Link_cell.Offset(0, 1).Value = _
        Link_cell.Hyperlinks(1).Address
     End If
  Next

  '範囲選択を解除
  ActiveCell.Select

End Sub

こちらは標準モジュールに記述します。先ずはハイパーリンクが設定されているB列の1行目から最終入力行までの範囲を選択します。

Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Select

次に選択した範囲全てに対しハイパーリンク設定有無を確認します。設定有りならC列へ出力し、設定無しならスルーします。

For Each Link_cell In Selection
If Link_cell.Hyperlinks.Count <> 0 Then
Link_cell.Offset(0, 1).Value = _
Link_cell.Hyperlinks(1).Address
End If
Next

後は範囲選択したままの状態を解除する為にアクティブセルを選択して終了です。

ActiveCell.Select

例えば同一Sheet内に大量のハイパーリンクがあり、その設定内容を書き出したい場合などに利用できるものと思います。

2.まとめ

最初はリンク先を開く前にメッセージボックスで移動するorしないを選択出来るものをイメージしてFollowHyperlinkイベントを使用してみましたが無理でした(笑)




ハイパーリンク自体は利用頻度も高く、FollowHyperlinkイベントやアドレス取得~書込みなど活用する機会もあるかと思いますので、今回の記事が何かの参考になれば幸いです。

以上、ハイパーリンククリック時に処理を行う方法などについてでした!

Ryo

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