ExcelのSHEETS関数|シート数を自動で取得する方法とSHEET関数との違い

スポンサーリンク

「このブックにシートが何枚あるか、自動で数えられたらいいのに」と感じたことはありませんか?

シート数をセルに手入力していると、追加や削除のたびに数字を直す手間がかかります。うっかり直し忘れると、集計の件数やリンクがズレてしまうこともあります。

ExcelのSHEETS関数を使えば、ブック内のシート数を常に自動で取得できます。 この記事では、SHEETS関数の基本構文から実務での応用パターン、SHEET関数との違い、よくあるエラーと対処法まで、まとめて解説します。

ExcelのSHEETS関数とは?読み方と基本の仕組み

SHEETS関数は、ブックに含まれるシートの総数を返す情報関数です。

読み方は「シーツ関数」です。英語の「sheet(シート)」の複数形がそのまま関数名になっています。関数名の末尾に「S」が付いているかどうかで、単数のシートを扱うSHEET関数とは役割がはっきり分かれます。

Excel 2013で新しく追加された関数で、現在はExcel 2016・2019・2021・2024、そしてMicrosoft 365でも使えます。Excel for Mac は 2016 以降で対応しています。

ここで押さえておきたい重要な仕様が1つあります。SHEETS関数は非表示シートも含めてカウントするという点です。

たとえばブックに「売上」「経費」「設定(非表示)」の3枚があるとします。このとき =SHEETS() の結果は「3」になります。非表示にしていても数には含まれるのです。さらに、グラフシートやマクロシート、ダイアログシートなど、ワークシート以外のシート種類も含めてカウントされます。

NOTE

似た名前のSHEET関数は「シートの番号」を返す関数です。SHEETS関数は「シートの数」を返します。名前は似ていますが、役割がまったく異なるので注意してください。

SHEETS関数の書式(構文と引数)

基本構文

=SHEETS([参照])

引数の説明

引数必須/省略可説明
参照省略可シート数を数えたい参照。省略するとブック全体のシート数を返す

参照には、セル範囲や名前定義、3D参照などを指定できます。3D参照とは、「Sheet1:Sheet5!A1」のように複数シートにまたがる参照のことです。

参照を省略した場合は、ブック全体のシート数がそのまま返ります。実務で最もよく使うのがこのパターンです。

TIP

引数を省略して =SHEETS() と書くのが最もよく使う形です。ブック全体のシート数が一瞬で分かります。

ExcelのSHEETS関数の基本的な使い方

引数を省略してブック全体のシート数を取得する

最もシンプルな使い方は、引数を省略して書く形です。

=SHEETS()

引数なしで使うと、ブックに含まれるすべてのシートの枚数を返します。シートを追加すれば自動的に数値が増え、削除すれば減ります。手動で数字を直す必要がありません。

たとえば次のような使い方ができます。適当なセルに =SHEETS() と入力するだけで、「現在のブックには○枚のシートがあります」とリアルタイムで表示されます。

3D参照で特定のシート範囲の枚数を取得する

ブック全体ではなく、特定の範囲のシート数を数えたい場合は、3D参照を使います。

=SHEETS(Sheet1:Sheet5!A1)

この数式は、Sheet1からSheet5までの5つのシートにまたがる3D参照を引数にしています。結果は「5」です。途中のシートが非表示でもカウントされます。

3D参照を使うときに注意したいのは、シートの並び順が連続していないとエラーになる点です。たとえば Sheet1 と Sheet5 だけを飛ばして参照することはできません。

名前定義を指定する

「名前の定義」で複数シートにまたがる範囲に名前を付けている場合、その名前を引数に指定できます。

たとえば「月別データ」という名前を Sheet1:Sheet3!A1:A10 に割り当てている場合です。

=SHEETS(月別データ)   → 3

結果は名前定義が参照しているシート範囲の枚数「3」になります。

SHEETS関数の実務活用パターン

SHEETS関数は単体だとシンプルな関数です。ただし、他の関数と組み合わせると、シート管理の自動化に活用できる場面が広がります。ここでは5つの実務パターンを紹介します。

パターン1: シートの追加漏れチェック

月別シート(1月〜12月)を使うブックで、12枚すべて揃っているか自動チェックする例です。

=IF(SHEETS()=12, "OK", SHEETS()&"枚(不足あり)")

シートが12枚なら「OK」、それ以外なら「8枚(不足あり)」のように表示されます。シートの追加忘れや削除ミスを防げます。

月初に新しいシートを作るタイプの運用では、このチェックを目立つ場所に置いておくと安心です。

パターン2: INDIRECT関数と組み合わせてシート一覧を作る

INDIRECT関数と連携して、シート数に応じた連番を振る例です。

=IF(ROW(A1)<=SHEETS(), ROW(A1), "")

この数式を下方向にコピーします。シート数以内の行には連番が入り、超えた行は空白になります。シートを追加すれば連番も自動で伸びる仕組みです。

たとえば「目次」シートで各シートへのリンクを作りたい場合に便利です。シートの枚数が変わっても、目次の行数が自動調整されます。

パターン3: 集計の完了率を表示する

12枚の月別シートのうち、入力済みのシート数を表示する応用例です。

="進捗: "&COUNTA(Sheet1:Sheet12!A1)&"/"&SHEETS(Sheet1:Sheet12!A1)&"シート完了"

COUNTA関数でA1セルに入力済みのシート数を数え、SHEETS関数で全シート数を取得しています。「進捗: 8/12シート完了」のように表示されます。

月次レポートの進捗管理やチームでのファイル更新状況のモニタリングに役立ちます。

パターン4: シート数の変動を検知する

前回のシート数を別セルに記録しておき、変動があったら警告を出す例です。

=IF(SHEETS()<>B1, "シート数が変わりました(現在: "&SHEETS()&"枚)", "変動なし")

B1セルに前回のシート数を入力しておきます。誰かがシートを追加・削除したときに、ひと目で気づけます。

共有ブックで複数人が作業する環境では、このチェックが役立つ場面が多いです。知らないうちにシートが消えていた、というトラブルを予防できます。

パターン5: 月次レポートの完成度を自動判定

月次レポートで「12シート中、完成している数」を判定する実務的な例です。

=IF(SHEETS()=12, "完成", SHEETS()<12, "作成中 "&SHEETS()&"/12", "シート過多")

シート数に応じて「完成」「作成中 8/12」「シート過多」の3段階で表示されます。月次レポートのテンプレートに組み込んでおくと、進捗状況がひと目で分かります。

SHEETS関数でよくあるエラーと対処法

エラー一覧表

エラー原因対処法
#REF!存在しないシートや名前定義を参照した参照先のシートが存在するか確認する
#NAME?関数名のスペルミス(末尾のSを忘れる等)=SHEETS() とスペルを確認する
#VALUE!引数に無効な値を指定したセル範囲または名前定義を正しく指定する
結果が1になる単独セル参照を指定している3D参照(Sheet1:Sheet5!A1 形式)を使う
非表示シートも含まれるSHEETS関数の仕様可視シートだけ数えたいときはVBAを使う

TIP

SHEETS関数で最も多い間違いは、SHEET関数(単数)と混同して使うことです。シートのを知りたいならSHEETS、シートの番号を知りたいならSHEET関数を使い分けてください。

非表示シートもカウントされる問題

SHEETS関数の大きな特徴は、非表示シートも含めてカウントする点です。これが「予想と数が合わない」と感じる原因になります。

たとえば画面に見えているのが10枚でも、非表示の設定用シートが2枚ある場合、=SHEETS() の結果は「12」になります。可視シートのみを数えたい場合は、SHEETS関数だけでは対応できません。

可視シートのみ数える代替策(VBA)

可視シートだけをカウントしたい場合は、VBAでユーザー定義関数を作る方法があります。

'--- 可視シートの枚数を返す関数 ---
Function CountVisibleSheets() As Long
    Dim ws As Worksheet
    Dim cnt As Long '可視シートのカウンター
    cnt = 0
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            cnt = cnt + 1
        End If
    Next ws
    CountVisibleSheets = cnt
End Function

このコードを標準モジュールに貼り付けると、=CountVisibleSheets() という自作関数としてセルで使えるようになります。非表示シートは数に含まれません。

NOTE

エラー値の種類と対処法一覧もあわせて確認すると、SHEETS関数以外のエラー対処にも役立ちます。

SHEET関数との違い・使い分け

SHEETS関数とSHEET関数の比較表

SHEETS関数とSHEET関数は名前が似ていて混同しやすい関数です。それぞれの違いを整理します。

項目SHEETS関数SHEET関数
返すものシートの(枚数)シートの番号(位置)
引数省略時ブック全体のシート数現在のシートの番号
引数の型参照(3D参照・名前定義)シート名・参照・名前定義
戻り値の例5(ブックに5枚)3(左から3番目)
使用場面シート枚数の管理・チェックシートの並び順を取得
Excelバージョン2013以降2013以降
分類情報関数情報関数

返り値の性質が根本的に違うため、シーンに応じて使い分ける必要があります。

どちらを使うべき?判断フロー

シーンに応じた使い分けは次の基準で判断します。

  • シートが全部で何枚あるかを知りたい → SHEETS関数
  • このシートは左から何番目かを知りたい → SHEET関数
  • シートの追加漏れをチェックしたい → SHEETS関数
  • 現在のシートがどこか目次で強調したい → SHEET関数

たとえば「12枚のシートが揃っているか確認」ならSHEETS関数です。「現在のシートが何番目か表示」ならSHEET関数を使います。

組み合わせて使うパターン

SHEETS関数とSHEET関数を組み合わせると、「最後のシートかどうか」を判定できます。

=IF(SHEET()=SHEETS(), "最後のシートです", SHEETS()-SHEET()&"枚先にまだシートがあります")

SHEET関数で現在のシート番号を取得し、SHEETS関数でシート総数と比較しています。シート番号と総数が一致していれば「最後のシートです」、そうでなければ「あと○枚」と残りシート数を表示します。

このパターンは、タブ間を移動しながら作業するときに「あと何枚残っているか」を確認する用途で便利です。

SHEETS関数に関するよくある質問(FAQ)

Googleスプレッドシートで同じことはできる?

Googleスプレッドシートには、残念ながらSHEETS関数は存在しません。同じことを実現したい場合は、Apps Scriptでカスタム関数を作る必要があります。

function countSheets() {
  return SpreadsheetApp.getActiveSpreadsheet().getSheets().length;
}

このコードをスクリプトエディタに貼り付けると、セルで =countSheets() という関数として使えるようになります。

SHEETS関数はいつから使える?

Excel 2013以降で使えます。Excel 2010以前では利用できません。Microsoft 365、Excel 2016・2019・2021・2024でもすべて利用可能です。Excel for Mac では2016以降で対応しています。

NOTE

Excel 2010以前を利用している環境では、代替としてVBAでシート数を取得する方法を検討してください。

他のブックのシート数は取得できる?

他のブックのシート数取得は、原則として推奨できません。

外部参照を使った =SHEETS('[Book2.xlsx]Sheet1'!A1) のような書き方は、期待通りに動作しないケースが多いです。ブックが同時に開いている場合でも、ファイル構成によっては正しい値が返らないことがあります。

他ブックのシート数を取得したい場合は、対象ブックを開いた状態でVBAを使う方法がより確実です。

非表示のシートもカウントされますか?

はい、カウントされます。これはSHEETS関数の仕様です。非表示シートや非常に非表示(VeryHidden)のシートも含めて、すべてのシートが数に含まれます。

可視シートのみを数えたい場合は、前述のVBAコード(CountVisibleSheets関数)を使ってください。

グラフシートやマクロシートも含まれる?

はい、含まれます。ワークシートだけでなく、グラフシート・マクロシート・ダイアログシートなど、ブック内のすべてのシート種類がカウント対象です。

通常の業務ではワークシートしか使わないことが多いため、意識する場面は少ないですが、古いExcelブックにグラフシートが埋め込まれている場合などに数が合わないときは、この仕様を思い出してください。

まとめ

ExcelのSHEETS関数は、ブックに含まれるシートの枚数を返す情報関数です。

  • =SHEETS() でブック全体のシート数を自動取得できる
  • 引数に3D参照を指定すると、その範囲のシート数を返す
  • 非表示シートやグラフシートもカウント対象に含まれる
  • Excel 2013以降・Microsoft 365・Mac 2016以降で利用可能
  • SHEET関数はシートの「番号」、SHEETS関数はシートの「数」を返す
  • IF関数と組み合わせてシートの過不足チェックに使える
  • 可視シートのみ数えたい場合はVBAで代替する

シンプルな関数ですが、シート管理の自動化に役立ちます。月次レポートや進捗管理、共有ブックのトラブル予防まで、使える場面は意外と多いです。ぜひ試してみてください。

関連記事

タイトルとURLをコピーしました