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
' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
正確には、セルの値に数値を設定すると、
ハイパーリンクの表示文字列の実態は空の文字列になる、ということです。
こういった特性を利用した設計を考えるなどすれば、
何かの役に立つかも知れませんね。
有難うございます。
数値、数字文字列値、プレフィクス付の数字文字に反応せせるようにしておけば、ハイパーリンクしようとする文字全体をコードに入力する必要はないのですね。
その方法を使い、作ってみようと思います。
ご親切に回答頂きありがとうございます。
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が前提にしている条件が崩される場面は、
容易に想像できます。
なので、他者による利用を想定する場合は、シートの保護なども検討に入れるか、
ハイパーリンク以外のオベジェクト(ボタンコントロールや各種シェープなど)などと
うまく使い分け出来ると好いと思います。
補足欄へのレスは以上です。
よく分かりました。
実際に考えているのは、並び替えを頻繁に行い、コードを設定する文字列の長さも違います。
Case "Alpha"
Call Hoge
のように、例えばその文字列をクリックするとマクロ名"a1"、"a2"、"a3"を実行するというように、マクロの名前とシート上の文字列をを別々に設定する方法があるのですね。
Application.EnableEvents = False
Application.Goto
Application.EnableEvents = True
も試してみでうまく出来ました。
シート上に設定した文字列を誤って変更してしまわないように注意しようと思います。
マクロ名を記号や、数値を使うことで、今後の整理がしやすいように思います。
この方法を元にして、実際に作ってみようと思います。
丁寧なご回答ありがとうございます。
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]
自セルにジャンプするように設定し、
見かけ上は何もしないように設定しておくのがベターです。
この回答への補足
ご回答ありがとうございます。
複数のハイパーリンクに異なるコードを割り当てることが出来ました。
FollowHyperlink イベントで1つのシートの複数のハイパーリンクをすべて設定すればよいのですね。
もう1点分からないことは、そのハイパーリンクは、Case "C3"とあるように、セルに設定するものなのですか。
例えば、ハイパーリンクを設定した後、並び替えをしてセル番地が異なることとなった場合は、Case "C3"のC3部分のの変更が必要なのですか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) Excel ハイパーリンク設定について 教えてください 例なんですが、 VBAにてファイル1の列Gに 2 2022/11/04 17:52
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) エクセルのハイパーリンクで別BOOKを開く 3 2022/10/26 18:48
- HTML・CSS ウェブサイトにアップされているPDFファイルのハイパーリンク先に飛ぶ時、新しいタブを開きたい 3 2022/12/13 13:57
- Excel(エクセル) ハイパーリンクの削除について 2 2022/11/10 07:32
- Excel(エクセル) エクセルの図形にハイパーリンクとマクロ登録について教えてください 1 2022/06/11 11:29
- Excel(エクセル) 画像のようなチェックボックスとハイパーリンクがありますが、 ハイパーリンクを押すと、チェックボックス 1 2023/04/07 12:56
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
Hyperlink関数をクリックしてくれるマクロ
Excel(エクセル)
-
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
エクセル マクロでリンク先を開く方法
Excel(エクセル)
-
-
4
ExcelからPDF文書の特定ページにリンクを貼る方法について
Excel(エクセル)
-
5
エクセルで「特定の文字を含むファイルへのリンク」or「特定の文字を含むファイルの検索の実行」
Excel(エクセル)
-
6
Excel VBAで自動的にハイパーリンクを設定する方法について教えて
Excel(エクセル)
-
7
VBAからのHYPERLINK関数のアドレス取得法
その他(Microsoft Office)
-
8
ExcelVBAにて既に開かれているPowerpointをアクティブにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelのプルダウンで2列分の情...
-
【Excel VBA】指定行以降をクリ...
-
VBAでセル同士を比較して色付け
-
Excel VBA、 別ブックの最終行...
-
Excel vbaで特定の文字以外が入...
-
セル色なしの行一括削除
-
TODAY()で設定したセルの日付...
-
EXCELで変数をペーストしたい
-
VBAでマクロ実行中はExcelのマ...
-
DataGridViewのセル編集完了後...
-
VBからEXCELのセルの値を取得す...
-
”戻り値”が変化したときに、マ...
-
連続する複数のセル値がすべて0...
-
エクセルVBAでコピーして順...
-
エクセルマクロでアニメを作る...
-
Excel2003 複数セル1列の入力済...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定のセルが空白だったら、そ...
-
Excelで指定した日付から過去の...
-
Excelのプルダウンで2列分の情...
-
【Excel VBA】指定行以降をクリ...
-
特定の文字を条件に行挿入とそ...
-
EXCELで変数をペーストしたい
-
エクセルVBAでコピーして順...
-
TODAY()で設定したセルの日付...
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
VBA実行後に元のセルに戻りたい
-
【Excel】指定したセルの名前で...
-
”戻り値”が変化したときに、マ...
-
Excel vbaで特定の文字以外が入...
-
EXCELのVBA-フィルタ抽出後の...
-
指定した条件で行セルを非表示...
-
VBA初心者です。結合セルを保持...
-
ExcelのVBAで数字と文字列をマ...
おすすめ情報