序
Office2024発売記念(?)に、HyperLink関数を使ってVBAマクロを呼び出すリンクを作成するという割と強烈なテクニックを公開します。
ボタンなどにマクロを登録するのと比べると
- リンク毎に引数を指定できる
- コピペで量産できる
という利点が有り、テーブルのデータを引数としてVBAを実行する仕組みなどが簡単に作成できます。
やりかた
Step.1 VBA関数を作る
まずは呼び出す関数をRange
オブジェクトを返すFunction
として作成します。
返すRange
オブジェクトはクリック後のジャンプ先として扱われるので、とりあえず現在の選択位置を示すSelection
を返すのが無難です。
Function OnClick(msg As string) As Range
Set OnClick = Selection
MsgBox msg
End Function
Step2. HyperLink関数でリンクを作る
HyperLink関数のURLを以下の様に記述することで先ほど作成したVBA関数を呼び出す事が出来ます。
引数の指定方法 | 例 |
---|---|
直接指定 | =HyperLink("#OnClick(""Hello World"")") |
アドレス指定 | =HyperLink("#OnClick(A1)") |
数式指定 | =HyperLink("#OnClick(Concat(A1:B1))") |
汎用化
勘の良い方ならもうお気付きでしょうが、引数に数式を記述できるので以下の様な関数を1つ作っておけば任意のFunction
マクロやSub
マクロを呼び出す事ができます。
Function CallVBA(ParamArray dummy() As Variant) As Range
Set CallVBA = Selection
End Function
注意点
1. 制限
呼び出すマクロはユーザー定義関数として扱われるので出来ないことが有ります。注意しましょう。
2. URL合成の負荷
URL文字列は関数を使って合成する事もできますが、マウスホバー時にカーソルを動かすたびに評価されるダメ実装になっているので注意が必要です。
うっかりVBAを使ってしまうとホバー時にCPU使用率が跳ね上がります。