質問: excelのハイパーリンクにマクロを割り当てる方法 ハイパーリンクの挿入で設定した、ハイパーリンクをクリックしてコードを実行する方法が分かりません。1つのシートで複数のハイパーリンクに、異なるコードを設定するにはどのようにすればよいのですか。ご回答宜しくお願い致します。
回答: #1-2、cjです。#2お礼欄を読みました。 > シート上に設定した文字列を誤って変更してしまわないように注意しようと思います。 ハイパーリンクの表示文字列 ≒ セルの値 が、仮に変更されてしまったとしても case "hoge" call hoge の "hoge" など、指定した文字列とマッチしなければ、 期待するマクロが動作しない、という結果なので、比較的軽い問題で済みますが、 偶然、他のマクロを実行させるキーワードにマッチしてしまうと、 全く期待しないマクロが実行されてしまい、こちらの場合は重篤なトラブルになりかねません。 場合によっては、excel一般機能の、データの入力規則、等が防衛策に役立つかも知れません。 例えば、文字列値でハイパーリンクを設定した後に、 データの入力規則を新たに設定し、数値(最小値~最大値)を指定しておく、 (勝手に文字列値を設定出来なくなる)とか。 (データの入力規則を設定したセルをコピーし、他のセルの書式のみ貼り付けることで 手数を減らして設定できます) これに因んだ情報として、以下。 ハイパーリンクの表示文字列 はあくまでも文字列ですから、 仮に、数値を設定したセルの値を拾ってマッチングするには select case target.range.value と書き換えてやれば可能です。 次のサンプル7では、 セル値が、 数値 123 数字文字列値 "123" プレフィクス付の数字文字列 "'123" 3つの場合にマッチします。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 private sub worksheet_followhyperlink(byval target as hyperlink) select case target.range.value case "hoge" call hoge case "piyo" call piyo case "fuga" call fuga case "123" call hogera end select application.enableevents = false application.goto application.enableevents = true end sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 または select case target.texttodisplay と書き換えると 数字文字列値 "123" プレフィクス付の数字文字列 "'123" にだけマッチして、数値には反応しません。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 private sub worksheet_followhyperlink(byval target as hyperlink) select case target.texttodisplay case "hoge" call hoge case "piyo" call piyo case "fuga" call fuga case "123" call hogera end select application.enableevents = false application.goto application.enableevents = true end sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 正確には、セルの値に数値を設定すると、 ハイパーリンクの表示文字列の実態は空の文字列になる、ということです。 こういった特性を利用した設計を考えるなどすれば、 何かの役に立つかも知れませんね。