SharePointに置いたExcelブックをブラウザーで開いたら、VBAで非表示にしたはずのシートが全部見えてしまった――。この現象は「Excel for the webの仕様」と「隠し方の設計」に原因があることが多いです。なぜ起きるのか、Web前提で現実的に解決する手順を整理します。
現象をもう一度整理:何が困るのか
デスクトップ版Excelでは、ボタンを押してVBAマクロを実行し、複数(時には数十〜数百)のシートをまとめて非表示にしている。ところが同じブックをSharePointに保存し、ブラウザー(Excel for the web)で開くと、非表示にしたはずのシートタブがすべて表示されてしまう――という状況です。
シート数が多いほど、Web版で1枚ずつ手作業で非表示に戻すのは現実的ではありません。しかも「見せたくない計算用シート」や「中間データ」を隠しているケースでは、閲覧者に余計な情報が見えて混乱の原因になりがちです。
まず押さえるべき結論
- Excel for the webではVBA(マクロ)が実行されないため、ボタンで行っていた「一括非表示」はWebではそのまま再現できません。
- Webで同じ見え方を徹底したいなら、運用を「デスクトップで開く」に寄せるか、Web前提の別設計(公開用ブックやOffice Scripts)に切り替えるのが近道です。
- 「シートを隠す」はアクセス制御(セキュリティ)ではありません。見せたくない情報がある場合は、権限設計や公開物の分離が必須です。
なぜこうなるのか:原因を切り分けるポイント
Excel for the webはVBAをサポートしない
SharePoint上のExcelファイルをブラウザーで開くと、基本的にExcel for the webが起動します。Excel for the webはVBAマクロを実行できないため、次のような設計だと「隠れる前提」が崩れます。
- シートを隠す処理がボタンや起動時(Workbook_Open)のマクロに依存している
- ActiveXコントロールやフォームボタンのクリックでマクロを走らせている
- マクロで「必要なシートだけ表示」「不要シートはVeryHidden」など、表示制御の中心がVBAになっている
Webで開いた瞬間、VBAが動かない以上、「隠す処理」は実行されません。つまり、Web版から見ると“隠されていない状態”でブックが表示されます。
「保存された非表示」と「マクロで隠す」は別物
ここが混乱しやすいポイントです。シートの非表示はブックに保存される設定なので、非表示にした状態で保存していれば、原理的には次に開いたときも非表示のままのはずです。
一方で、実際の現場では「ボタンで隠したが、その後に保存されていない」「閉じる前に元に戻すマクロが動いている」「自動保存や共同編集のタイミングで想定外の状態になっている」など、保存状態が想像とズレていることが多くあります。
| パターン | デスクトップ版での挙動 | Excel for the webでの見え方 | 対処の方向性 |
|---|---|---|---|
| マクロが「隠す」だけで、隠した状態で保存している | 次回も非表示のまま開ける | 多くの場合は同様に非表示で開ける | 保存状態の確認・互換性の確認 |
| マクロが開いた後に「隠す」(起動時マクロ) | 開くと自動で隠れる | マクロが動かないため隠れない | Web前提なら別手段(Office Scriptsなど) |
| ボタンを押した後、保存せずに閉じている | その場では隠れるが、次回は元に戻る | 元に戻った状態で表示される | 保存手順の見直し・自動保存の扱い確認 |
「VeryHidden(非常に非表示)」を使っている場合は互換性に注意
VBAでシートを隠す場合、次の2種類がよく使われます。
- 通常の非表示(Hidden):右クリック→「再表示」で戻せる
- 非常に非表示(VeryHidden):VBE(VBAエディタ)などからでないと戻しにくい
ブックの設計によっては、Web側でVeryHiddenの扱いが期待通りにならず、「見えてしまう」「想定と違う形でシートが扱われる」といったケースが起こり得ます。もしVBAでxlSheetVeryHiddenを多用しているなら、まずは通常の非表示に切り替えた場合にWebでどう見えるかを検証すると、原因の切り分けが進みます。
結論:原因は「Webが壊している」ではなく「WebはVBA前提で動かない」
SharePointやExcel for the webが“勝手に表示した”というより、VBAが動く前提で作られた表示制御が、Webでは成立しないと考えるのが整理しやすいです。ここを前提に、次の対策から選びます。
対処法:デスクトップ版Excelで開く運用に寄せる
「どうしてもVBAで一括制御したい」「ブックの仕組み(集計・入力・ボタン操作)自体がマクロ前提」という場合は、最も確実で手戻りが少ない方法です。
ユーザーに「デスクトップ アプリで開く」を促す
- SharePointのファイルメニューや上部のメニューから「デスクトップ アプリで開く」を選ぶ
- Teams上のファイルでも、開き方を「デスクトップアプリ」に切り替える
- OneDrive/SharePointの既定の開き方を「アプリで開く」に設定できる環境もある
この方法が向くケース・向かないケース
| 観点 | 向く | 向かない |
|---|---|---|
| 操作 | ボタンやフォームで一括処理したい | ブラウザーだけで完結させたい |
| 環境 | 全員がデスクトップ版Excelを使える | 端末制限が強い(VDI/共有端末/モバイル中心) |
| 共同編集 | 同時編集が必須ではない | 常時リアルタイム共同編集が必須 |
運用のコツ:開き方のブレを減らす
「人によってはブラウザーで開いてしまう」問題を減らすには、次の工夫が効きます。
- ブックの先頭(表紙)シートに「このファイルはデスクトップで開いてください」と明記する
- SharePointのリンクを配布する際に「デスクトップで開く手順」を一緒に配布する
- 可能なら、ライブラリ側の設定で既定の開き方を調整する(組織設定・権限に依存)
対処法:SharePoint/ブラウザー前提で「公開用ブック」に分ける
ブラウザーで見せたい相手が多い、閲覧者がデスクトップ版Excelを持たない、という場合は「同じブックで全部を賄う」より、見せるものだけを入れた公開用ブックを別に用意する方がトラブルが減ります。
公開用ブックを作ると何が良いのか
- そもそも「隠す」必要がなくなり、閲覧者が迷わない
- 不要シートがないため、読み込みも軽くなりやすい
- マクロを含めない構成にでき、Excel for the webでの互換性が上がる
- 機密データを混ぜない設計にしやすい(情報漏えいリスクを下げられる)
作り方の選択肢
| 方式 | 概要 | 向くケース | 注意点 |
|---|---|---|---|
| シートをコピーして別ブック化 | 閲覧に必要なシートだけを新規ブックにコピー | 手早く分けたい、構造が単純 | 元ブック更新時に反映作業が必要 |
| 値貼り付けで固定化 | 計算結果だけを値として持たせる | 閲覧だけで十分、誤編集を避けたい | 更新の自動化が必要になりやすい |
| Power Query/接続で参照 | 公開用ブックが元データを取り込み表示 | データが定期更新、項目が多い | 接続先権限、更新タイミングの設計が必要 |
運用の現実解:役割分担でブックを分ける
次のように役割を分けると、SharePoint上の混乱が大きく減ります。
| ファイル | 用途 | 置き場所 | 権限 |
|---|---|---|---|
| 作業・集計用(マクロあり) | 入力、集計、整形、ボタン操作 | SharePoint(限定)またはローカル | 担当者のみ編集 |
| 公開用(閲覧専用) | 閲覧、共有、報告 | SharePoint(広く共有) | 閲覧者は基本「表示のみ」 |
対処法:Excel for the webで一括非表示したいなら「Office Scripts」を検討
「ブラウザー運用は崩したくない。でも手作業は避けたい」という場合、環境が合えばOffice Scriptsが現実的な代替になります。Office ScriptsはExcel for the web上で動く自動化機能で、VBAのようにブックを操作できます(ただしVBAとは別物で、TypeScriptベースのスクリプトです)。
Office Scriptsでできること・できないこと(非表示に関して)
| 項目 | Office Scripts | VBA |
|---|---|---|
| Excel for the webで動く | ○(対応環境) | × |
| シートの一括表示/非表示 | ○ | ○ |
| フォーム/ActiveXとの連携 | 制約が大きい | ○ |
| Power Automateから実行 | ○ | ×(別途RPA等が必要) |
例:全シートを非表示にして、指定した1枚だけ表示する
「表紙(Menu)だけ見せたい」「閲覧時はDashboardだけにしたい」など、最小限の表示にしたいときの例です。最後の1枚が非表示にならないよう、表示対象シート名を必ず指定します。
function main(workbook: ExcelScript.Workbook) {
const keepVisibleName = "Menu"; // 表示しておきたいシート名に変更
const sheets = workbook.getWorksheets();
// まず指定シートが存在するか確認
const keep = sheets.find(s => s.getName() === keepVisibleName);
if (!keep) {
throw new Error(`シート「${keepVisibleName}」が見つかりません。シート名を確認してください。`);
}
// いったん全部隠してから、指定シートだけ表示
sheets.forEach(s => s.setVisibility(ExcelScript.SheetVisibility.hidden));
keep.setVisibility(ExcelScript.SheetVisibility.visible);
}
例:特定のシートだけ非表示にする(リスト指定)
「この数枚だけ見せたくない」「中間計算シートだけ隠したい」場合は、非表示リストで管理すると保守しやすくなります。
function main(workbook: ExcelScript.Workbook) {
const hideList = [
"Calc_01",
"Calc_02",
"Temp",
"Master"
];
const sheets = workbook.getWorksheets();
sheets.forEach(s => {
if (hideList.includes(s.getName())) {
s.setVisibility(ExcelScript.SheetVisibility.hidden);
}
});
}
例:非表示を解除して全シートを表示する(戻し用)
function main(workbook: ExcelScript.Workbook) {
workbook.getWorksheets()
.forEach(s => s.setVisibility(ExcelScript.SheetVisibility.visible));
}
Office Scripts導入の手順(手動実行)
- SharePoint上の対象ブックをExcel for the webで開く
- メニューに「自動化(Automate)」が表示されているか確認する
- 「新しいスクリプト」を作成し、上記スクリプトを貼り付けて保存
- 必要なタイミングでスクリプトを実行して、シートの表示状態を整える
さらに一歩進めるなら、Power AutomateからOffice Scriptsを呼び出し、定期的に「公開状態に整形する」運用も可能です。更新のたびに手作業で隠す必要が減ります。
注意:シート非表示は「守る」機能ではない
よくある誤解として、「非表示にすれば見えない=安全」という考えがあります。しかし、非表示はあくまでUI上の表示制御です。編集権限がある人は再表示できる可能性がありますし、ダウンロードしてデスクトップ版で開けば別の見え方になることもあります。
見せたくない情報があるときの優先順位
| やりたいこと | 推奨手段 | 非表示で代替できる? |
|---|---|---|
| 閲覧者に“余計なシートを見せない” | 公開用ブックを分ける/Office Scriptsで整える | △(混乱防止には有効) |
| 特定の人に“データ自体を見せない” | SharePoint権限、公開物分離、機密ラベル等 | × |
| 再表示・構造変更を防ぎたい | ブックの構造保護(パスワード)+運用ルール | △(補助にはなる) |
「ブックの構造を保護」は一緒に検討すると効果的
シートを隠すだけだと、編集者が簡単に再表示できてしまいます。業務上「勝手にシートを増やす/消す/再表示する」ことを抑えたいなら、デスクトップ版Excelでブックの構造を保護し、シート構成の変更を抑制するのが定番です(ただしパスワード管理は別途必要です)。
よくある質問(詰まりポイント)
ブラウザーの画面だけで、複数シートをまとめて非表示にできない?
標準のUI操作だけで「すべてを一括で非表示」にする導線は限られます。シートが多いほど手作業は破綻しやすいので、Web運用を続けるならOffice Scriptsのような自動化か、公開用ブック分離を先に検討するのがおすすめです。
「デスクトップで隠して保存」すれば、Webでもそのままになるのでは?
理屈としてはその通りですが、実運用では「保存されていない」「開いた後に隠す設計(起動マクロ)」「VeryHiddenなど互換性差」などの要因で期待通りにならないことがあります。まずはデスクトップ版で非表示にした直後に保存し、その状態でWebで開いたときの再現性を確認してください。
マクロ付き(.xlsm)をSharePointに置くと、何か特別な制限がある?
.xlsmはSharePoint上で管理できますし、Excel for the webでも開けます。ただし、繰り返しになりますがWebではVBAを実行できません。閲覧者がブラウザーで開く可能性があるなら、「VBAを前提にした表示制御」だけに頼らない設計が必要です。
判断に迷ったら:要件別おすすめルート
| 要件 | おすすめ | 理由 |
|---|---|---|
| 既存のVBA資産を活かしたい | デスクトップで開く運用に統一 | 最短で確実。表示制御が崩れにくい |
| 閲覧者はブラウザー中心、シート数が多い | 公開用ブックを別途用意 | 「隠す」より「入れない」方が事故が減る |
| ブラウザー運用のまま一括制御したい | Office Scripts(可能ならPower Automate連携) | Web上で自動化でき、手作業を排除しやすい |
まとめ:SharePointでの「非表示が見える問題」は設計の見直しで解決できる
SharePointからExcelをブラウザーで開くと非表示シートが表示される問題は、Excel for the webがVBAを実行しないことが根本にあります。対策は大きく3つです。
- VBAを活かすなら、デスクトップ版Excelで開く運用に統一する
- ブラウザー共有が前提なら、公開用ブックを分けて「隠す」を不要にする
- Webで一括制御したいなら、Office Scriptsという代替自動化を検討する
「非表示」は便利ですが、情報保護ではありません。誰に何を見せるかを整理したうえで、運用と仕組みを選ぶのが最短ルートです。

コメント