【1行マクロ】ハイパーリンクを貼る【ExcelVBA】

  • [記事公開]2022.10.31[最終更新]2022.11.01
  • VBA

Excelのマクロに不慣れな方には、まず1行マクロから慣れていくことをおすすめしています。1行マクロというのは、Excel上1行だけにマクロを実行するものです。

1行マクロの中から、今回はハイパーリンクを貼る方法を紹介します。

次のようなファイルがあります。


アンケート結果のブック

場所はCドライブの直下にあるtemp\20221030chieというフォルダの中です。

こういうExcelがありまして、


アンケート集計用データ

A列の3行目からアンケート結果のハイパーリンクを貼りたいなーーーという要望があったとき、どうしますか?という問題です。

マクロの記録

1行マクロはマクロの記録を利用するのが基本です。


セルA3をアクティブにした状態で、マクロの記録を開始する

図のように、セルA3をアクティブにした状態で、マクロの記録を開始します。


マクロの記録のボックスが開いたら、ショートカットキーのところにはShift+Eを入力する

図のように、マクロの記録のボックスが開いたら、ショートカットキーのところにはShift+Eを入力してください。

1行マクロのときにはCtrl+mとすることが私は多いのですが、今回はハイパーリンクなので、もともとハイパーリンクはCtrl+Eで貼れることがあるので、それにちなんでCtrl+Shift+Eにしてみました。

別にCtrl+mでもいいです。この辺は好みの問題です。


セルA3上で右クリック→リンク→リンクを挿入

マクロの記録が開始したら、↑この図のようにセルA3上で右クリック→リンクを選び→さらにリンクを挿入を選びます。


ハイパーリンクの挿入が開いたらファイルの参照を選ぶ

図のように、ハイパーリンクの挿入が開いたらファイルの参照を選び、ハイパーリンクしたいファイルを選びます。


ハイパーリンクしたいファイルを選ぶ

図のように、ハイパーリンクしたいファイルを選んだら、OKを押します。

「ファイルにリンク」のボックスでもOKを押します。


ハイパーリンクが挿入されたところ。これでマクロの記録は終了する。

図のように、ハイパーリンクが挿入されます。これでマクロの記録は終了します。

コードの編集

Alt+F11を押します。VBEが起動します。


VBE
Option Explicit

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+Shift+E
'
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
        "C:\temp\20221030chie\アンケート回答者A.xlsx", TextToDisplay:="Aのアンケート"
End Sub

コードの説明を少ししておきます。

ActiveSheetというのは、現在アクティブなシートのことです。

ActiveSheet.Hyperlinksというのは、アクティブなシートに属するHyperlinksコレクションのことです。

.Addとありますから、Hyperlinksコレクションに追加しています。

追加する内容はHyperlinkというオブジェクトです。オブジェクトの内容は、AnchorオプションとAddressオプションとTextToDisplayオプションの三つのオプションで決まります。

ここでちょっと注意。Hyperlinksコレクションのアイテムは、Hyperlinkと決まっています。小文字のsが付くかつかないかで、コレクションかそのアイテムかを見分けています。

また、オプションを指定するときは「=」でなく「:=」を使います。オプションが複数あるときは「,」(カンマ)でつなぎます。1行が異様に長くなるようなら、行末に「 _」(半角スペースとアンダーバー)を入れます。

Anchorオプションにはハイパーリンクを貼りたいセルオブジェクトを指定します。マクロの記録ではSelectionが入りましたが、Selectionだと「現在選択されているセル」という意味になり、あいまいなので、ActiveCellにします。

AddressオプションにはString型でファイルへのパスを指定します。

TextToDisplayオプションもString型です。



Hyperlinks.Addのオプションとワークシートの関係

コードを次のように加工します。


加工後
Option Explicit

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+Shift+E
'
    Dim stText As String    '追加------(1)
    Dim stName As String    '追加------(1)
    
    stText = ActiveCell.Value   '追加-----(2)
    stName = Left(stText, 1)    '追加-----(3)
    
    ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:= _
        "C:\temp\20221030chie\アンケート回答者" & stName & ".xlsx", TextToDisplay:=stText
    '↑一部修正---------(4)
    
    ActiveCell.Offset(1, 0).Select  '追加------(5)
End Sub

加工したコードの説明をします。

(1)追加した変数は二つです。どちらもString型です。ひとつはTextToDisplayオプションで使う用(stText)で、もう一つはAddressオプションで使う用(stName)です。

(2)ではstTextにハイパーリンクを貼る前のセルの値を格納しています。

(3)では、stTextという変数に格納された値の、先頭の1文字分だけを切り出して、stNameという変数に格納しています。

(4)ではAnchorのところをSelectionからActiveCellに変更しました。また、AddressオプションとTextToDisplayオプションの内容を、stNameとstTextを使うように変更しました。


文字列の構造を分析してみる。共通部分と可変部分を見つけ出す。
コードに落とし込んだ文字列。固定部分はそのまま”(ダブルコーテーション)でくくって、&(アンパサント)で連結する。

(5)はマクロの記録では記録していないコードです。現在アクティブなセルの1行下のセルを選択しなさいという意味のコードです。

実行

ワークシートに戻って実験してみます。

実験してみる

図のように、セルA4を選択した状態でCtrl+Shift+Eとすると

無事ハイパーリンクが挿入された

図のように、無事ハイパーリンクが挿入され、選択されているセルが1行下のセルに移動しました。

これを次々に実行していくと、

図のように、複数行のハイパーリンクが一気にできました。

なお、ハイパーリンクを開こうとすると、

警告メッセージ

図のような警告メッセージが表示されることがありますが、これはセキュリティに応じて表示されるものですので、お使いの環境では表示されないこともあります。もし表示されたら「はい」を選んでください。