PR

Excelで動的にシート内ハイパーリンクを設定する

知っ得かもしれないExcelの癖-その2
この記事は約4分で読めます。

知っていると得するかもしれないExcelの癖」シリーズ第十五回、テーマは「ハイパーリンクの設定」になります。
Excel 2016バージョン1902を使用して確認しています。


動的なハイパーリンの設定だけではなく、ハイパーリンクの書式設定と条件付き書式との兼ね合いについてもまとめて置きたく存じます。

スポンサーリンク

動的ハイパーリンクの設定

挿入タブから「リンク」リボングループの「ハイパーリンクの追加」から開かれる「ハイパーリンクの挿入」画面では事前に定義したセルにしかハイパーリンクを設定することはできません。

そのため任意のセルにカーソル(フォーカス)を移動させるためにはHYPERLINK関数を使って設定する必要があります。
その際に同一ブックの同一シート内をリンク先セルとして設定するためにはリンク先のセル参照の前に「#」を付けることは下記のサイトに書かれています。

さらにMATCH関数と組み合わせて使えば、列は固定されますが列のどこかのセルに入っている値をMATCH関数で検索して、その値の入っている列位置(列番号)を特定することでハイパーリンクを動的に設定することができます。

例えばF列に「不適合」の文字が入っているセルを探して、そのセルに対するハイパーリンクを設定するためには下記のような数式を使用します。

=HYPERLINK("#F"&MATCH("不適合",$F:$F,0),"ここをクリック")

上記数式を設定したセルには「ここをクリック」という文字列が表示されて、文字列に対してリンクが設定されます。
リンク先はF列のどこかで「不適合」とだけ入っているセル(MATCH関数の第3引数が0は完全一致のため)になります。

ハイパーリンクで遷移する時の動き方

ハイパーリンクをクリックした時、リンク先に対してどのように位置に画面が移動するかまとめて見ました。
この時の動作条件は下記のようになります。

  • 画面で行に対して「ウィンドウ枠の固定」が設定されていて、固定枠は画面の1/3以下の状態
  • 列は固定していません。
  • 設定された固定枠の行の中に、ハイパーリンクを設定したセルを配置
  • リンク先のセルは非固定枠の中の行に配置
番号現在表示されている画面とリンク先のセルの位置関係画面の移動
1画面にリンク先のセルが完全に表示されている状態移動しない。
2画面がリンク先セルよりも上位位置を表示している状態画面一番下の行(一部が隠れているケースを含む)から1行上の行にリンク先セルが表示されように移動する。
3画面がリンク先セルよりも下位位置を表示している状態リンク先セルが、固定枠の直下の先頭行になるように移動する。

番号2と3で動きが異なるのがハイパーリンクで「たまにきず」の動き方です。
期待する動き方としては、常に3の状態で移動してくれることですが…

そうなりますと2の場合には、位置補正としてリンク先セルが3の位置に来るように再リンクする必要があるのですが、これは

  • Excelウインドウの表示サイズ
  • リボン表示の有無
  • 数式バーの表示行
  • 行の高さ
  • ズームの設定

などにより、可変ですから関数だけでは調整は不能で、その時々の状態に応じて手動で設定していただく必要があります。

ハイパーリンクの書式設定と条件付き書式との関係性

書式設定自体は、さきほど記載したサイトで説明されていますので、ここでは省略させていただき、条件付き書式との関係性についてまとめます。

結論から先に述べますと、下記のような関係性になります。

  • 「ハイパーリンク」の書式設定は、条件付き書式で上書きされます。条件付き書式の方が上位です。
  • ただし、「表示済みのハイパーリンク」の書式設定は、条件付き書式を上書きしてしまいます。条件付き書式の方が下位です。

そうと分かれば、それでデザインするだけなのですが、知らないと少しだけ手戻りする可能性がありますので、ご注意ください。

まとめ

ハイパーリンクの機能を使用すれば、例えば入力内容の判定をするセルを設定しておき、入力に問題がある時はその行へのリンクを動的に設定する事ができます。

ただ、少しイケていないところがありますので、手を加えなければならないケースがあるかもしれません。

なお、「表示済みハイパーリンク」の書式はセルごとに設定を変えることは可能ですので、例えば条件付き書式と同じ結果になるように設定することはやればできます。

それからリンク時の画面の動きですが、2の場合は一旦下げてから3の処理をすれば実装できるような気がするのですが…実際にはそう簡単な話ではないことと推察致します。

以上、最後までご一読いただきありがとうございました。