Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HyperLink関数でVBAマクロを実行するリンクを作成

Last updated at Posted at 2024-11-17

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使用率が跳ね上がります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?