「このシートって左から何番目だっけ?」と、手作業で数えた経験はありませんか?
シートが10枚、20枚と増えてくると、目視で順番を確認するのは手間がかかります。非表示シートがあると、正確な番号を把握するのはさらに大変です。
ExcelのSHEET関数を使えば、シートの番号を数式で自動取得できます。 この記事では引数の4パターンを比較表で整理し、SHEETS関数との違いやエラー対処法まで解説します。
ExcelのSHEET関数とは?できることをおさらい
SHEET関数は、指定したシートの番号(位置)を返す関数です。「このシートはブック内で左から何番目にあるか」を数値で教えてくれます。
Excel 2016以降のすべてのバージョンとMicrosoft 365で使えます。
SHEET関数はExcelの情報関数カテゴリに分類されます。同じカテゴリには、Excelのバージョンや動作環境を取得できるINFO関数があります。
SHEET関数の読み方・基本構文
読み方は「シート関数」です。英語の「sheet」がそのまま関数名になっています。
=SHEET([値])
引数の「値」は省略できます。省略した場合は、数式を入力したシートの番号を返します。
シート番号の仕組み(左から1,2,3…非表示シートも含む)
シート番号は、タブの左端から順に1, 2, 3…と割り振られます。固定IDではありません。シートを並べ替えたり追加・削除したりすると、番号も変わります。
ここで注意したいのが、非表示シートもカウントに含まれる点です。通常の非表示シートだけでなく、VBAで設定するVery Hidden(完全非表示)シートもカウント対象です。たとえば3枚のシートがあり、2番目が非表示の場合でも番号は1, 2, 3です。非表示だからといって飛ばされることはありません。
SHEET関数の使い方|引数4パターン比較
SHEET関数は引数の指定方法が4種類あります。まず一覧で確認し、それぞれ詳しく見ていきましょう。
| パターン | 数式の例 | 返す値 |
|---|---|---|
| 引数を省略 | =SHEET() | 現在のシート番号 |
| シート名を指定 | =SHEET(売上) | 「売上」シートの番号 |
| セル参照で指定 | =SHEET(Sheet2!A1) | Sheet2の番号 |
| テーブル名・名前定義 | =SHEET(売上テーブル) | テーブルがあるシートの番号 |
引数を省略する(現在シートの番号を取得)
=SHEET()
最もシンプルな使い方です。数式を入力したシートの番号が返ります。たとえば左から3番目のシートに入力すれば、結果は「3」です。
シート名を直接指定する
=SHEET(売上)
シート名をそのまま引数に入力します。ダブルクォーテーション(”)で囲む必要はありません。 「売上」シートが左から2番目にあれば、結果は「2」です。
シート名にスペースが含まれる場合も同様です。たとえば「売上 月別」というシート名でも、そのまま =SHEET(売上 月別) と入力できます。
セル参照で指定する
=SHEET(Sheet2!A1)
別シートのセルを参照する形式です。参照先のシートの番号が返ります。セルの値ではなく、セルが存在するシートの位置を取得するのがポイントです。
テーブル名・名前付き範囲で指定する
=SHEET(売上テーブル)
テーブル名や名前の定義(ブックスコープ)を指定できます。そのテーブルや名前が存在するシートの番号を返します。
ただし、シートスコープの名前定義を指定すると#NAME?エラーになります。名前の定義を使う場合は、スコープがブック全体になっているか確認してください。
SHEET関数とSHEETS関数の違い
SHEET関数とSHEETS関数は名前が似ていて混同しやすい関数です。役割はまったく異なるので、しっかり区別しておきましょう。
一目でわかる比較表
| 項目 | SHEET関数 | SHEETS関数 |
|---|---|---|
| 何を返す | 特定シートの番号(位置) | 参照範囲内のシート総数 |
| 引数省略時 | 現在のシート番号 | ブック全体のシート総数 |
| 非表示シート | カウントに含む | カウントに含む |
| 主なエラー | #REF! / #N/A / #NAME? | #REF! |
| 用途例 | このシートは何番目? | このブックに何枚ある? |
使い分けの判断基準
- シートの「位置」を知りたい → SHEET関数
- シートの「枚数」を知りたい → SHEETS関数
たとえば「現在のシートが左から何番目かを表示したい」ならSHEET関数です。「ブックにシートが全部で何枚あるか確認したい」ならSHEETS関数を使います。
SHEET関数の実務活用パターン
SHEET関数は単体でもシート番号を取得できます。他の関数と組み合わせると、さらに便利に活用できます。
INDIRECT関数と組み合わせてシートを動的参照する
SHEET関数が返すのは数値(番号)です。INDIRECT関数(文字列をセル参照に変換する関数)はシート名の文字列が必要なので、直接組み合わせることはできません。
実務では、シート名の一覧をセルに用意しておく方法がよく使われます。A列にシート名の一覧があるとします。
=INDIRECT("'"&INDEX(A:A,SHEET())&"'!B1")
SHEET関数で現在のシート番号を取得し、INDEX関数でA列からシート名を引き当てています。INDIRECT関数がそのシート名を使ってB1セルを動的に参照します。
シートの並び順を数式でチェックする
シートが想定どおりの順番になっているか確認する例です。
=IF(SHEET()=SHEETS(), "最後のシートです", "残り"&SHEETS()-SHEET()&"枚")
SHEET関数で現在の番号を取得し、SHEETS関数の総数と比較しています。「最後のシートです」や「残り3枚」のように表示されます。
SHEET関数のエラーと対処方法
SHEET関数で表示されるエラーは主に3種類です。原因と対処法をそれぞれ確認しましょう。エラーの詳細はエラー値の種類と対処方法も参考にしてください。
#N/Aが表示される原因と解決策
原因: 存在しないシート名を引数に指定した場合に発生します。
=SHEET(受注) → シート「受注」が存在しなければ #N/A
対処法: シート名のスペルを確認してください。タブに表示されている名前と完全に一致している必要があります。スペースの有無や全角・半角の違いにも注意しましょう。
#REF!が表示される原因と解決策
原因: 数式が参照しているシートが削除された場合に発生します。
もともと存在していたシートを参照する数式を作成した後で、そのシートを削除すると#REF!になります。
対処法: 削除したシートを復元するか、数式の参照先を修正してください。IFERROR関数で囲んでおくと、エラー時に代替値を表示できます。
#NAME?が表示される原因と解決策
原因: スコープがシート限定の名前定義を引数に指定した場合に発生します。
=SHEET(シートスコープの名前) → #NAME?
対処法: 「数式」タブの「名前の管理」でスコープを確認してください。「ブック」スコープの名前定義に変更すると解決します。
まとめ
SHEET関数は、シートの番号(左からの位置)を返す関数です。
=SHEET()で現在のシート番号を取得できる- 引数にはシート名・セル参照・テーブル名を指定できる
- シート名にダブルクォーテーションは不要
- 非表示シートもカウント対象に含まれる
- SHEETS関数はシートの「枚数」、SHEET関数はシートの「番号」を返す
INDIRECT関数との組み合わせなど、応用の幅も広い関数です。ぜひ活用してみてください。
