配布用のブックに、社内の単価表や個人情報の一覧がそのまま残っている——受け取った側にまで見えてしまうのは避けたいけれど、シートごと削除してしまうと次回の更新で作り直しになる。こうした「見せたくないが消したくない」シートの扱いに、ワークシートの非表示が役立ちます。反対に、以前に隠したシートを配布前にまとめて戻しておきたい場面も少なくありません。
本記事では、Spire.XLS for Python を使用して Python で Excel のワークシートを非表示または表示にする方法 を解説します。はじめに 3 つの表示状態を整理し、そのうえで非表示にする手順、Excel の画面上からは戻せない「強い非表示」、表示に戻す手順、そして非表示にできるシート数の制約までを順に確認していきます。
クイックナビゲーション
- 実行環境の準備
- 3 つの表示状態:Visible/Hidden/StrongHidden
- ワークシートを非表示にする
- 「強い非表示」と Excel の[再表示]
- 非表示のワークシートを表示に戻す
- 非表示のシートを判定してまとめて戻す
- すべてのシートを非表示にはできない
- まとめ
- FAQ
実行環境の準備
本記事のコードは Spire.XLS for Python と plum-dispatch v1.7.4 を使用しています(動作確認は Spire.XLS for Python 16.8.2)。pip コマンドでインストールしてください。
pip install Spire.XLS
スクリプト側では、次の 2 行をインポートします。
from spire.xls import *
from spire.xls.common import *
手動でインストールする場合は、Spire.XLS for Python のダウンロードページ からパッケージを取得できます。
3 つの表示状態:Visible/Hidden/StrongHidden
ワークシートの表示状態は WorksheetVisibility 列挙体の 3 つの値で表します。「非表示」とひと口に言っても 2 種類あり、Excel 上での扱いが大きく異なるため、先にここを押さえておきます。
| 状態 | 設定する値 | Excel での見え方 | 表示に戻す方法 |
|---|---|---|---|
| 表示 | WorksheetVisibility.Visible |
通常どおりタブに並ぶ | — |
| 非表示 | WorksheetVisibility.Hidden |
タブが消える | タブの右クリック →[再表示]から戻せる |
| 強い非表示 | WorksheetVisibility.StrongHidden |
タブが消える | [再表示]の一覧にも出ないため、コードからしか戻せない |
StrongHidden は Excel が内部で「VeryHidden」と呼んでいる状態に対応し、値は xlSheetVeryHidden として保存されます。Excel の[再表示]ダイアログには Hidden のシートだけが一覧表示され、StrongHidden のシートは現れません。つまり StrongHidden は「利用者に気づかれず、操作もできない場所にシートを退避させる」ための状態です。
以下では、実際にこの 2 種類を使い分けてみます。
ワークシートを非表示にする
表示状態を変えるのは、対象シートの Worksheet.Visibility プロパティに値を代入するだけです。Workbook.Worksheets[] でシートを取得し、Hidden または StrongHidden を設定します。
from spire.xls import *
from spire.xls.common import *
# Workbook オブジェクトを作成
workbook = Workbook()
# Excel ワークブックを読み込む
workbook.LoadFromFile("Sample.xlsx")
# 2 番目のワークシートを通常の非表示にする
workbook.Worksheets[1].Visibility = WorksheetVisibility.Hidden
# 3 番目のワークシートを「強い非表示」にする
workbook.Worksheets[2].Visibility = WorksheetVisibility.StrongHidden
# ワークブックを保存
workbook.SaveToFile("HideWorksheets.xlsx", FileFormat.Version2016)
workbook.Dispose()

実行すると、2 番目のシートには state="hidden"、3 番目には state="veryHidden" が記録され、Excel で開くとどちらのタブも表示されなくなります。元のデータや数式はそのまま残っており、非表示はあくまで「タブを出さない」設定である点に注意してください。
「強い非表示」と Excel の[再表示]
Hidden と StrongHidden の違いがはっきり現れるのは、Excel の画面上でシートを戻そうとしたときです。
ワークブックを Excel で開き、シート タブを右クリックして[再表示]を選ぶと、非表示になっているシートの一覧が表示されます。この一覧には Hidden のシートだけが並び、StrongHidden のシートは表示されません。つまり、StrongHidden にしたシートは Excel の操作だけでは復元できず、コードで WorksheetVisibility.Visible を代入するまで利用者からは見えないままになります。
![Excel の[再表示]ダイアログに表示されるシート](/images/tutorials-images/python-hide-or-unhide-excel-worksheets-2.png)
この性質は、次のように使い分けると効果的です。
- 一時的にたたむシート — 作業中に邪魔な補助シートは
Hidden。あとで自分やチームが[再表示]から戻せます。 - 配布物に残したくないシート — 単価表や個人情報の一覧は
StrongHidden。受け取った側の操作では見つけられません。
どちらも「シートを消す」わけではないため、ブックの構造を崩さずに配布版だけを整えられます。
非表示のワークシートを表示に戻す
非表示を解除するときは、同じ Worksheet.Visibility プロパティに WorksheetVisibility.Visible を代入します。戻す対象が Hidden でも StrongHidden でも、指定する値は同じです。
from spire.xls import *
from spire.xls.common import *
# Workbook オブジェクトを作成
workbook = Workbook()
# 非表示シートを含むワークブックを読み込む
workbook.LoadFromFile("HideWorksheets.xlsx")
# 2 番目のワークシートを表示に戻す
workbook.Worksheets[1].Visibility = WorksheetVisibility.Visible
# 3 番目のワークシート(強い非表示)も表示に戻す
workbook.Worksheets[2].Visibility = WorksheetVisibility.Visible
# ワークブックを保存
workbook.SaveToFile("UnhideWorksheet.xlsx", FileFormat.Version2016)
workbook.Dispose()

保存後に Excel で開くと、4 つのタブがすべて並んだ状態に戻ります。非表示の設定はファイルに保存されているため、読み込み直したあとでも Visibility を参照すれば現在の状態を確認できます。
非表示のシートを判定してまとめて戻す
シートが多いブックでは、1 枚ずつ指定して回るより、状態を判定しながらまとめて処理したほうが確実です。Workbook.Worksheets をループ処理し、Visibility が Visible 以外のシートだけを対象にします。
from spire.xls import *
from spire.xls.common import *
# Workbook オブジェクトを作成
workbook = Workbook()
# 非表示シートを含むワークブックを読み込む
workbook.LoadFromFile("HideWorksheets.xlsx")
# すべてのワークシートを確認する
for i in range(workbook.Worksheets.Count):
sheet = workbook.Worksheets[i]
# 表示状態を出力して確認
print(sheet.Name, sheet.Visibility)
# 非表示になっているシートだけを表示に戻す
if sheet.Visibility != WorksheetVisibility.Visible:
sheet.Visibility = WorksheetVisibility.Visible
# ワークブックを保存
workbook.SaveToFile("UnhideWorksheet.xlsx", FileFormat.Version2016)
workbook.Dispose()
このコードを実行すると、読み込み直後は次のように出力されます。
社員名簿 WorksheetVisibility.Visible
売上データ WorksheetVisibility.Hidden
単価表 WorksheetVisibility.StrongHidden
集計 WorksheetVisibility.Visible
Visibility プロパティは書き込みだけでなく読み取りにも使えるため、「どのシートが非表示かを一覧化する」「特定の状態のシートだけを処理する」といった用途にも応用できます。なお、非表示のシートが 1 枚もない場合は条件が成立せず、何も変更されません。
すべてのシートを非表示にはできない
ここまで見てきたとおりシートは個別に非表示にできますが、ブック内のすべてのシートを非表示にすることはできません。最後の 1 枚を非表示にしようとした時点で、次の例外が発生します(実測)。
spire.xls.common.SpireException: A workbook must contain at least a visible worksheet
これは Excel 本体の仕様に合わせた制約で、ブックを開いたときに表示できるシートが 1 枚もない状態を防いでいます。「重要なシートをまとめて隠したい」という場合でも、少なくとも 1 枚は表示のまま残しておく必要があります。実務では、表紙や目次のような「見えていて困らないシート」を 1 枚残すのが一般的です。
まとめ
本記事で扱った操作を、設定する値ごとに整理します。
| やりたいこと | 設定する値 |
|---|---|
| 作業用シートを一時的に隠す | WorksheetVisibility.Hidden |
| 配布物からシートを見えなくする | WorksheetVisibility.StrongHidden |
| 非表示を解除する | WorksheetVisibility.Visible |
| 非表示のシートを調べる | sheet.Visibility を読み取って Visible と比較する |
ポイントは、Hidden と StrongHidden が「Excel の[再表示]から戻せるかどうか」で分かれることです。相手に操作させたくないシートは StrongHidden、あとで自分が戻す前提のシートは Hidden と覚えておけば、配布版のブックをコード側で安全に整えられます。
Spire.XLS for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。なお無償の試用版では、保存したファイルに評価用の警告シートが追加されます。ライセンスを適用するとこれも出力されなくなります。
FAQ
非表示にしたシートのデータは削除されますか?
いいえ。非表示は表示状態だけを切り替える設定で、シートそのものやセルの値・数式はブック内に残ります。WorksheetVisibility.Visible に戻せば、元の内容がそのまま再表示されます。
Hidden と StrongHidden はどう使い分ければよいですか?
「あとで Excel の操作から戻したいかどうか」で選びます。自分やチームが作業中に戻す前提のシートは Hidden、配布相手に見せたくない・戻してほしくないシートは StrongHidden が適しています。StrongHidden は[再表示]の一覧に現れないため、誤って戻される心配がありません。
StrongHidden にしたシートを Excel の画面から戻せますか?
戻せません。[再表示]ダイアログに StrongHidden のシートは表示されないため、Excel の UI からは復元できません。戻すには sheet.Visibility = WorksheetVisibility.Visible を実行するコードが必要です。
すべてのシートを非表示にして保存できますか?
できません。最後の表示シートを非表示にしようとした時点で SpireException(A workbook must contain at least a visible worksheet)が発生します。少なくとも 1 枚は表示のまま残してください。
非表示のシートは計算や集計の結果に影響しますか?
影響しません。非表示はあくまでタブを表示しない設定で、他のシートの数式からは通常どおり参照されます。合計値などは非表示のシートも含めて計算されます。
非表示のシートをまとめて表示に戻すにはどうすればよいですか?
Workbook.Worksheets をループ処理し、sheet.Visibility != WorksheetVisibility.Visible の条件で絞り込んでから WorksheetVisibility.Visible を代入します。本記事の「非表示のシートを判定してまとめて戻す」のコードがそのまま使えます。






