• ベストアンサー

Excelのハイパーリンクにマクロを割り当てる方法

ハイパーリンクの挿入で設定した、ハイパーリンクをクリックしてコードを実行する方法が分かりません。1つのシートで複数のハイパーリンクに、異なるコードを設定するにはどのようにすればよいのですか。ご回答宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#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 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 正確には、セルの値に数値を設定すると、 ハイパーリンクの表示文字列の実態は空の文字列になる、ということです。 こういった特性を利用した設計を考えるなどすれば、 何かの役に立つかも知れませんね。

di6351
質問者

お礼

有難うございます。 数値、数字文字列値、プレフィクス付の数字文字に反応せせるようにしておけば、ハイパーリンクしようとする文字全体をコードに入力する必要はないのですね。 その方法を使い、作ってみようと思います。 ご親切に回答頂きありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1、cjです。#1補足欄へのレスです。 > もう1点分からないことは、そのハイパーリンクは、Case "C3"とあるように、セルに設定するものなのですか。 > 例えば、ハイパーリンクを設定した後、並び替えをしてセル番地が異なることとなった場合は、Case "C3"のC3部分のの変更が必要なのですか。 #1で示した例では仰る通りです。 ハイパーリンクと実行したいマクロとを、セルの移動とは無縁に 常に関連付けを維持したいということでしたらば、 ハイパーリンクの表示文字列で関連付けするのが比較的簡単です。 例えば、 予め、ハイパーリンクの表示文字列を実行したいマクロ名にしておけば、 以下のように書くことが出来て、 セル番地変更の影響を受けないようになります。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Private Sub Worksheet__FollowHyperlink(ByVal Target As Hyperlink)   Select Case Target.Name   Case "Hoge"     Call Hoge   Case "Piyo"     Call Piyo   Case "Fuga"     Call Fuga   End Select End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 もう少しシンプルに書くと ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)   Select Case Target.Name   Case "Hoge", "Piyo", "Fuga"     Application.Run (Target.Name)   End Select End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 これでも同じ結果になります。 ただ、ハイパーリンクのジャンプ先をどうするか、という問題は残ります。 (どこに飛んで行くか解らなくなるので) ひとつの方法としてハイパーリンクの参照先はすべて、 当該シートのA1セル等に統一しておいて、 ジャンプした後に、元のハイパーリンクが設定されたセルに戻してやるような 使い方もあります。 その場合は、   Application.EnableEvents = False   Application.Goto   Application.EnableEvents = True この3行を End Sub 行の直前に挿入してください。 また、 ハイパーリンクの表示文字列 と、実行するマクロ との 関連付けさえ書いておけばよいので、   "Alpha" と表示された ハイパーリンクがクリックされたら、     マクロ: Hoge を   "Bravo" と表示された ハイパーリンクがクリックされたら、     マクロ: Piyo を   "Charlie" と表示された ハイパーリンクがクリックされたら、     マクロ: Fuga を という対応関係を明確にしておけば、 自在に応用できることと思います。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Private Sub Worksheet__FollowHyperlink(ByVal Target As Hyperlink)   Select Case Target.Name   Case "Alpha"     Call Hoge   Case "Bravo"     Call Piyo   Case "Charlie"     Call Fuga   End Select End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ハイパーリンクの表示文字列 について 気を付けて欲しいのは、 シート上で容易に変更可能なことや、   Case "Alpha"   Case "alpha"   Case "Alpha" のように大文字小文字、全角半角、を区別する、ということと、 数字のみで指定してしまうと、数字文字列なのか数値なのかの区別が複雑になってしまうことです。 紹介した、ハイパーリンクの表示文字列 の例の他に、 ハイパーリンクの参照先アドレスで振り分けることなど、 ここには書きませんが、他にも方法はあります。 念の為、 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) から End Sub までで一連のイベントプロシージャですが、 ひとつのシートモジュールに同じ目的同じ名前のプロシージャを重複して設定することはできません。 ハイパーリンク自体は簡単に編集出来てしまうものですから、 セル番地に限らず、VBAが前提にしている条件が崩される場面は、 容易に想像できます。 なので、他者による利用を想定する場合は、シートの保護なども検討に入れるか、 ハイパーリンク以外のオベジェクト(ボタンコントロールや各種シェープなど)などと うまく使い分け出来ると好いと思います。 補足欄へのレスは以上です。

di6351
質問者

お礼

よく分かりました。 実際に考えているのは、並び替えを頻繁に行い、コードを設定する文字列の長さも違います。 Case "Alpha"     Call Hoge のように、例えばその文字列をクリックするとマクロ名"a1"、"a2"、"a3"を実行するというように、マクロの名前とシート上の文字列をを別々に設定する方法があるのですね。  Application.EnableEvents = False   Application.Goto   Application.EnableEvents = True も試してみでうまく出来ました。 シート上に設定した文字列を誤って変更してしまわないように注意しようと思います。 マクロ名を記号や、数値を使うことで、今後の整理がしやすいように思います。 この方法を元にして、実際に作ってみようと思います。 丁寧なご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

シートモジュールで_FollowHyperlink イベントを使います。 シートモジュールに以下を貼り付けます。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)   Select Case Target.Range.Address(0, 0)   Case "C3"     Call Hoge   Case "D4"     Call Piyo   Case "E5"     Call fuga   End Select End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 以上の例では、  C3 の ハイパーリンクがクリックされたら、マクロ: Hoge を  D4 の ハイパーリンクがクリックされたら、マクロ: Piyo を  E5 の ハイパーリンクがクリックされたら、マクロ: fuga を 実行します。 パターンとして   Case "C3"     Call Hoge の2行で一組、  "C3"  …  セル範囲  Hoge  …  マクロ名 の部分を、そちらでの必要に合わせて。編集します。 この2行一組のパターンを適宜増やすことで、 > 1つのシートで複数のハイパーリンクに、異なるコードを設定する ことが可能です。 なお、呼び出すマクロは標準モジュールに登録してあるものとします。 無論、     Call Hoge のようにマクロを呼び出す代わりに、直接、コードを記入しても構いません。 ハイパーリンクの登録は [このドキュメント内] [セル参照を入力してください]と書かれたボックスに ハイパーリンクを設定するセルのアドレス(C3 など)を指定して [OK] 自セルにジャンプするように設定し、 見かけ上は何もしないように設定しておくのがベターです。

di6351
質問者

補足

ご回答ありがとうございます。 複数のハイパーリンクに異なるコードを割り当てることが出来ました。 FollowHyperlink イベントで1つのシートの複数のハイパーリンクをすべて設定すればよいのですね。 もう1点分からないことは、そのハイパーリンクは、Case "C3"とあるように、セルに設定するものなのですか。 例えば、ハイパーリンクを設定した後、並び替えをしてセル番地が異なることとなった場合は、Case "C3"のC3部分のの変更が必要なのですか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • excelでハイパーリンクが使えません。

    excelで複数のシートを作成し、シート1に各シートへのハイパーリンクを貼り付けたいのですが、 シート1上で、挿入→ハイパーリンク→このドキュメント内→シート2と操作して作成したハイパーリンク『Sheet2!A1』をクリックすると『このコンピュータに設定されている制約のため、この操作は中止されました。システム管理者に問い合わせてください。』と表示されシートに飛びません。 どこに問題があるのでしょうか? 環境: OS:windows7 excel:excel2010 セキュリティ:カスペルスキーインターネットセキュリティ2011

  • エクセルのハイパーリンクを教えてください。

    エクセルのハイパーリンクを教えてください。 Sheet1のA1選択→挿入→ハイパーリンク→「このドキュメント内」→「Sheet2!B2」 でハイパーリンクを設定したのですが、 同様に、 Sheet1,A2クリックで、Sheet2,B3が。Sheet1,B2クリックで、Sheet2,C3が。 Sheet1,A3クリックで、Sheet2,B4が。Sheet1,B3クリックで、Sheet2,C4が。 Sheet1,A4クリックで、Sheet2,B5が。Sheet1,B4クリックで、Sheet2,C5が。 Sheet1,A5クリックで、Sheet2,B6が。Sheet1,B5クリックで、Sheet2,C6が。 と、範囲を広げる際には、セル一つずつを設定品けらばならないのでしょうか。単純にオートフィルはできないようですが、簡単な方法を教えてください。 よろしくお願いします。

  • エクセルのテキストにハイパーリンクを素早く貼りたい

    右クリック→ハイパーリンク→ハイパーリンクの挿入、 より、素早い設定方法はありますか?

  • エクセル ハイパーリンクについて

    エクセル ハイパーリンクの設定について教えてください。 Excel のハイパーリンクで「(1)このBook(ファイル)の、(2)このSheetの、(3)このセルに」リンクするという 設定方法は分かるのですが、(3)のこのセルに、という部分で「この文字が入力されているセルに」リンク という細かい設定は出来るのでしょうか? 例) A1をクリックすると、別ファイル別シートの「確認」という文字列が入力されているセルにリンクする。 該当のセルが複数ある場合はどのセルでもOK。(出来れば一番上にあるセルがベストですが) 色んな書籍を漁ってみたのですが、とうとう分かりませんでした。 エクセルに詳しい方、どうか宜しくお願い致します。

  • Excelでハイパーリンクが自動的に設定されないようにする方法は?

     エクセルでセルにメールアドレスやURLを入力すると、当該セルに自動的にハイパーリンクが挿入(設定)されますが、設定不要なシートなのでそのつどハイパーリンクを削除しています。  面倒なのであらかじめシート全体に挿入されないよう設定する方法が分かりません。どなたかご存知の方教えてください。

  • エクセルのマクロでハイパーリンクを設定したい

    フォーム→ボタン よりシート内に数個ボタンを設置いたしました。 このボタンをクリックすると、会社のHPなどが開くようなハイパーリンクを設定したいのですが、マクロで出来ますでしょうか? セル内にはなるべくアドレスの表示をしたくないので、ボタンにしました。よろしくお願い致します。

  • excelのハイパーリンク

    現在、顧客名簿がexcel97にて作ってあります。 シート1に顧客情報、シート2に作業履歴を打ち込んでハイパーリンクで繋げようという魂胆です。 しかし作業履歴は当然増えるので、セルを挿入して書き加えると、ハイパーリンクの指定座標は変わらないのでこのままでは使えません。 セルや列、行の挿入にハイパーリンクが対応する、良い方法はありませんでしょうか?

  • EXCELのハイパーリンクのセルを探す方法

    いつもお世話になります。コピーしてきたEXCELファイルを自分用に編集したのですが、どうやら前にハイパーリンクが設定されたらしく、ファイルを開く度にリンクについての質問をされます。ハイパーリンクを消したいのですが、シート数が19ページもあり、どのシートのどのセルに設定されているのかがわかりません。 全ページを"HYPER"で検索したのですが、ハイパーリンクの設定されているセルはありませんでした。ハイパーリンクの設定されているセルを探す方法をご存知の方がいらっしゃいましたら、アドバイス宜しくお願い致します。

  • エクセルのハイパーリンクについて

    いつもお世話になります。 エクセルの1つのファイルの中に1から100までの名前のシートが100個あります。 同じファイルにある表紙のシート内に1から100までのハイパーリンクを設定してそれぞれのシートに1クリックで移動する設定をしたいのですが、なにか簡単に設定できないのでしょうか。ひとつひとつ作る方法はわかるのですが、実際は200アイテムが30ファイルぐらいあるので手間がかかりすぎます。 どうか、ご教授ください。

  • エクセルのハイパーリンク先が毎回ずれるのを修正するには

    担当店舗検索データというのをエクセルのハイパーリンク機能を使って作っています。具体的にはシート1に47都道府県名を記載し、全てにハイパーリンクを挿入する。そしてシート2の店舗一覧(これは1枚のシートに複数店舗データが並んでいるものです)。シート1のハイパーリンクは各該当店舗の頭にセル(A4など)を指定していますが、リンクを実行した際、該当店舗が参照シートの真ん中に表示されないのです。上に行ったり、ぎりぎりしたのセルで参照して表示される。これをリンク先の店舗データがシートの真ん中に必ずくるようにする方法、またはマクロで設定することは可能でしょうか。(マクロはまったくの素人です)ご教示お願いいたします。

このQ&Aのポイント
  • 【MFC-J739DN】の初期パスワードが間違っている場合の対処法
  • 初期パスワードが間違っているとエラーが表示される場合、【MFC-J739DN】の設定をリセットして初期状態に戻す方法があります。
  • お使いのパソコンまたはスマートフォンの操作方法によって異なりますが、通常は設定メニューからリセットオプションを選択し、指示に従って設定を初期化することで初期パスワードが再設定されます。
回答を見る