以下のように、予め、[目次]シートに追加する予定のシート名一覧表を作成し、存在しているシートのみに、そのシートへ遷移するリンクを表示する方法について解説していきます。
1. シートへのリンクを作成する
初めに、以下のようなシート名一覧表を作成し、今後追加する予定のシート名を入力します。
また、シート名一覧表には、[リンク]という項目を用意します。
まずは、それぞれのシートのセルA1に遷移するリンクを、HYPERLINK関数を用いて作成していきます。
この関数の使い方は、以下になります。
=HYPERLINK(リンク先, [別名])
// 指定したリンク先に遷移するリンクを作成する
// リンク先:リンク先の情報を指定
// [別名]:セルに表示させる文字を指定(省略時は引数[リンク先]に指定した値を表示する)
HYPERLINK関数を用いて、特定のシートのセルに遷移するリンクを作成する場合は、引数[リンク先]に、「#セルのアドレス」と指定する必要があります。
例えば、「ABC」というシートのセルA1に遷移する場合は、「#ABC!A1」になります。
「!」などの特殊な文字が含まれるシート名「!ABC」のシートに遷移する場合は、「#’!ABC’!A1」などと、シート名を「’」で囲む必要があります。
そのため、予め「’」で囲んだシート名を指定しておくと良いです。
今回の場合、シート名は、表の中のセルの値を参照する必要があるため、「&」を活用し、以下のような数式を入力します。
=HYPERLINK("#'"&B4&"'!A1","●")
//「#’」とセルB4の値、「’!A1」を「&」で文字結合
後は、こちらの数式を表の最後までコピーすることで、リンクを作成することができます。
ただ、このままですと、存在していないシートに関してもリンクが表示されてしまいます。
存在していないシートを選択すると、以下のように、エラーが表示されてしまいます。
ということで、次は、存在しないシートに関しては、リンクを表示させない仕組みを実現していきます。
2. 存在しないシートへのリンクを非表示にする
HYPERLINK関数のみですと、常にリンクが表示されてしまうため、他の関数を組み合わせる必要があります。
まずは、シートの存在の有無を数式で求めていきます。
シートの存在の有無を求めるには、INDIRECT関数が便利です。
この関数の使い方は、以下になります。
=INDIRECT(参照文字列)
// 指定した参照文字列を参照した値を返えす
// 参照文字列:参照先の情報
INDIRECT関数を活用して、引数にリンク先のアドレスを指定することによって、そのリンク先が存在しない場合にエラーを返すことができます。
試しに、表の隣にINDIECT関数を入力して、シートの存在の有無を確認していきます。
=INDIRECT("'"&B4&"'!A1")
数式を入力して表の最後までコピーすると、存在しているシートの場合は、そのシートの指定したセルの値が表示され、存在していない場合は、「#REF!」というエラーが表示されます。
次に、エラーの場合はTRUE、エラー出ない場合はFALSEを返すISERROR関数で囲みます。(ISERROR関数で囲むだけなので、関数の解説は省略します)
=ISERROR(INDIRECT("'"&B4&"'!A1"))
このようにTRUEとFALSEを表示することができました。
後は、TRUEの場合のみに、HYPERLINK関数の内容を表示すればよいので、IF関数を活用します。
この関数の使い方は、以下になります。
=IF(論理式, 値が真の場合, 値が偽の場合)
// 論理式の値に応じて返す値を変更する
// 論理式:TRUEもしくはFALSEを返す式
// 値が真の場合:論理式がTRUEの時に返す値
// 値が偽の場合:論理式がFALSEの時に返す値
実際に、INDIRECT関数、ISERROR関数、IF関数をHYPERLINK関数の数式に組み合わせると、以下のようになります。
=IF(ISERROR(INDIRECT("'"&B4&"'!A1")),"",HYPERLINK("#'"&B4&"'!A1","●"))
このようにして、シートが存在している行のみにリンクを表示させることができます。
リンクの色が青色にならない場合は、手動で書式を設定すると良いです。
この作成方法の場合、リンクが表示されていない空白のセル上にカーソルを移動した時に関しても、カーソルが指マークになってしまいます。
ただ、リンクとしては機能せず、クリックしてもセルが選択されるだけなので、そこまで問題ではないです。
該当するシートが追加された時に、自動でリンクが表示されます。