xlsxファイルの拡張子をzipに変えると、開く。中身はフォルダだった

朝もやのかかった針葉樹林の風景イラスト

Excelのファイルを右クリックして、名前を変える。

売上表.xlsx → 売上表.zip

ダブルクリックすると、開く。中にフォルダとファイルが入っている。

これは裏技ではなく、仕様だ。.xlsx は、はじめからZIPファイルとして設計されている。

知っていると、壊れたファイルから中身を取り出せたり、資料に貼られた画像をまとめて抜き出せたり、思わぬ情報漏えいを防げたりする。

この記事は育ちます。公開後も、会話パート・トーク・補足を足していきます。
公開 2026-10-14 / 最終更新 2026-10-14(公開)

水深 — Office Open XMLという規格

2007年、Excel 2007から標準の保存形式が変わった。

  • .xls それまでの形式。バイナリ(人が読めない数値の並び)
  • .xlsx 新しい形式。XMLファイルをZIPでまとめたもの

この形式をOffice Open XMLという。ECMA-376として標準化され、その後ISO/IEC 29500にもなっている。公開された規格だ。

だから、Excelがなくても中身を読めるし、プログラムから作ることもできる。pythonのライブラリでExcelファイルを生成できるのは、この規格が公開されているからだ。

中に何が入っているか

実際に開いてみると、こういう構成になっている。

[Content_Types].xml

中に入っているファイルの種類の一覧。目次のようなもの。

_rels/

ファイル同士の関係を書いたフォルダ。どのシートがどのファイルか、といった対応づけ。

docProps/

  • core.xml 作成者、最終更新者、作成日時、更新日時
  • app.xml アプリケーション名、シート名の一覧、編集時間

xl/

ここが本体。

  • workbook.xml ブック全体の設定。シートの一覧、名前の定義
  • worksheets/sheet1.xml 1枚目のシートの中身。セルの値と数式
  • sharedStrings.xml 文字列を一元管理する表
  • styles.xml 書式の定義
  • media/ 貼り付けた画像がそのまま入っている
  • calcChain.xml 数式の計算順序
  • vbaProject.bin マクロ(.xlsmの場合のみ)

フォルダを開いていくだけで、何が入っているか分かる。Excelファイルは、フォルダを圧縮したものだった。

朝もやのかかった針葉樹林の風景イラスト

sharedStrings.xml が、重さの正体

この構造を知ると、「なぜ重いのか」が説明できるようになる。

sharedStrings.xml は、ブック内のすべての文字列を集めた表だ。同じ文字列が何度出てきても、実体は1つだけ持って、セルからは番号で参照する。

たとえば「東京都」が1万回出てくるシートでも、「東京都」という文字列は1つしか保存されない。セルには「文字列表の5番」と書かれている。

重複を排除する仕組みになっている。よくできている。

ただし裏返すと、種類の多い文字列がたくさんあると、この表が巨大になる。

  • 商品名が5万種類
  • 摘要欄に全部違う文章
  • 取引先名が重複なしで1万件

こういうシートは、数値だけのシートより圧倒的に重い。行数ではなく、文字列の種類が効く。

前に「Excelファイルが重い」という話を書いたが、原因のひとつはここにある。数値を減らすより、同じ文字列を使い回す設計にするほうが効くことがある。

画像をまとめて取り出せる

いちばん実用的なのがこれだと思う。

xl/media/ の中に、貼り付けた画像がそのままの形で入っている。

  • 資料に貼られた写真を、まとめて取り出したい
  • 元の画像ファイルを紛失した
  • 1枚ずつ「図として保存」するのが面倒

こういうとき、拡張子をzipに変えて解凍すれば、image1.png、image2.jpg……と並んで出てくる。

ファイル名は連番になるので、どれがどれか分からなくなる。それでも、1枚ずつ右クリックするよりは速い。

WordやPowerPointも同じ構造なので、.docx や .pptx でも同じことができる。提案書に貼った画像を取り出すときに使える。

作成者の名前が、残っている

こちらは逆に、知らないと危ないほうの話。

docProps/core.xml には、作成者名と最終更新者名が入っている。

Excelにログインしているアカウント名や、Officeのインストール時に入れた名前がそのまま入る。社外にファイルを送ると、その名前も一緒に届く。

  • 前任者の名前が残ったまま送っている
  • 使い回した見積書に、別の顧客向けに作った人の名前が残っている
  • 個人名を出したくない場面で、フルネームが入っている

さらに、app.xml には編集にかけた合計時間が記録されていることがある。「この資料、10分で作ったんだな」と分かってしまう。

確認と削除の方法

Excelの「ファイル」→「情報」→「問題のチェック」→「ドキュメント検査」。

検査を実行すると、個人情報、コメント、非表示のシート、非表示の行列などが一覧で出る。まとめて削除できる。

社外に出すファイルは、ドキュメント検査をかけてから送る。 これは習慣にしておく価値があると思う。

非表示のシートは、隠れていない

構造を知ると、もうひとつ気づくことがある。

非表示にしたシートは、ファイルの中に普通に入っている。

workbook.xml に「このシートは hidden」と書いてあるだけで、中身の sheetN.xml はそのまま存在する。

だから、

  • 非表示シートに単価の原価が入っている
  • 使わなくなった前年の見積が残っている
  • 計算用の中間データが隠してある

こういうファイルを社外に出すと、見ようと思えば見られる。Excelで再表示するだけでも見えるし、ZIPを開けば確実に見える。

「非表示」はセキュリティではない。 見せたくないものは、シートごと削除してから送る。

シート保護やブック保護も同様で、あれは誤操作を防ぐための機能であって、情報を守る機能ではない。

星空の下のキャンプの風景イラスト

壊れたファイルから、救い出す

「ファイルが破損しています」と言われて開けなくなったとき。

ZIPとして開けることがある。開ければ、中の sheet1.xml をテキストエディタで見れば、セルの値は読める。書式や数式は失われるが、数字だけは拾える。

もう少し踏み込むと、calcChain.xml を削除してZIPに戻すと開けるようになる場合がある。calcChain.xml は計算順序のキャッシュで、なくてもExcelが再生成する。ここが壊れているだけなら、消せば直る。

ただし、必ずコピーを取ってから試す。手で中身をいじると、確実に壊れるほうへ進むこともある。

.xls との違いと、どちらを使うか

古い形式との違いも整理しておく。

.xls.xlsx
形式バイナリXML + ZIP
最大行65,5361,048,576
最大列25616,384
ファイルサイズ大きい圧縮が効くので小さい
破損への強さ全体が読めなくなりやすい部分的に救える
規格非公開(後に公開)公開規格
マクロ含められる.xlsm にする必要がある

いまから .xls を使う理由は、ほぼない。受け取ったファイルが .xls なら、開いて .xlsx で保存し直すほうが軽くなる。

マクロ入りのファイルが .xlsm という別の拡張子になっているのは、マクロの有無を拡張子で見分けられるようにするためだ。.xlsx にはマクロを入れられない。メールの添付でマクロ付きが弾かれるのも、この区別があるから成立している。

プログラムから扱えるということ

構造が公開されているおかげで、Excelを起動せずにファイルを作ったり読んだりできる。

  • サーバ上で、Excelなしで帳票を生成する
  • 何百ファイルを一括で処理する
  • 特定のセルだけを抜き出して集計する

VBAはExcelの中でしか動かないが、こちらはExcelの外から動かせる。

大量のファイルを扱うなら、Excelの外から触るほうが速い。 1ファイルずつ開いて閉じる時間がかからない。

経理の実務でいえば、「部署ごとに提出された100個のExcelから、特定のセルだけ集める」という作業がこれにあたる。手作業でやると1日仕事だが、外から読めば数分で終わる。

中身を手で書き換えるのは、やめたほうがいい

最後に注意を。

構造が分かると「直接書き換えれば速いのでは」と思う。実際できることもある。

ただ、おすすめしない。

  • ファイル同士の関係(_rels)が整合していないと開けなくなる
  • [Content_Types].xml との対応が崩れる
  • ZIPの圧縮方式によっては、Excelが受け付けない

読むのはいい。書くのはライブラリに任せる。 これが安全な線だと思う。

例外は、さきほどの calcChain.xml の削除くらい。あれは「消すだけ」なので、壊しにくい。

林のそばに張ったテントと焚き火の風景イラスト

実務で使える、5つの場面

まとめて使える形にしておく。

  • 画像をまとめて取り出す → 拡張子を zip に変えて解凍、xl/media/ を見る
  • 作成者名を消す → ドキュメント検査をかけてから送る
  • 非表示シートを確認する → 送る前に、再表示で中身を見る
  • 壊れたファイルから数字を拾う → sheet1.xml をテキストで開く
  • なぜ重いか調べる → sharedStrings.xml のサイズを見る

どれも、ファイルがフォルダだと知っているだけでできる。

航路 — 見えている表は、いちばん外側だった

整理する。

  • .xlsx はZIPファイル。拡張子を zip に変えると開く
  • 規格はOffice Open XML(ECMA-376 / ISO/IEC 29500)。公開されている
  • sharedStrings.xml が文字列を一元管理している。文字列の種類が多いと重くなる
  • xl/media/ に、貼り付けた画像がそのまま入っている
  • docProps/core.xml に作成者名が残る。社外に出す前にドキュメント検査
  • 非表示シートは隠れていない。見せたくないものは削除する
  • 壊れたファイルは、中のXMLから数字だけ救えることがある
  • 書き換えはライブラリに任せる。手でいじるのは calcChain.xml の削除まで

いちばん面白かったのは、拡張子を変えるだけで中が見えることだった。

暗号でも、特殊な形式でもない。フォルダをまとめて、名前を変えただけのものだった。

そう分かってからは、Excelファイルの見え方が変わった。画面に出ている表は、いちばん外側の見せ方にすぎない。その下に、テキストのファイルが何枚も重なっている。

そして、そこには見せるつもりのなかったものも入っている。

docxとpptxも、同じ構造

Excelの話をしてきたが、WordもPowerPointも同じ仕組みだ。

  • .docx → word/document.xml、word/media/
  • .pptx → ppt/slides/slide1.xml、ppt/media/

拡張子をzipに変えれば、同じように開く。

実務でいちばん使えるのは、pptxからの画像取り出しだと思う。提案資料に貼られた図やグラフを、まとめて取り出せる。

そしてdocxの検索。Wordファイルが壊れて開けないとき、word/document.xml をテキストエディタで開けば、タグの隙間に本文が残っている。整形は必要だが、文章そのものは救える。

Officeのファイルは、全部フォルダだった。 一度そう思うと、扱い方が変わる。

「ファイルが大きい」ときに見る順番

構造が分かると、原因の切り分けができる。zipにして開いて、サイズの大きいものから見る。

① xl/media/ が大きい

貼り付けた画像が原因。元の解像度のまま入っていることが多い。スマホで撮った写真を貼ると、1枚数MBになる。

対策は、Excelの「図の圧縮」。図を選んで、書式タブから圧縮する。「この画像だけに適用する」のチェックを外せば、全部にかかる。

② sharedStrings.xml が大きい

文字列の種類が多い。前に書いたとおり。

摘要欄に自由記述が並んでいるようなシートは、ここが膨らむ。コード化できるものはコードにするのが効く。

③ styles.xml が大きい

書式の種類が多すぎる。列全体・行全体に色や罫線を付けたり、他のファイルからコピーを繰り返したりすると、使われていない書式が溜まる。

④ worksheets/sheetN.xml が大きい

セルが多い。ただし、使っていないセルに書式だけ残っていることがある。Ctrl+Endで飛んだ先が、データの終わりよりずっと遠いなら、それが原因。

余分な行と列を削除して保存し直すと、大幅に減ることがある。

⑤ calcChain.xml が大きい

数式が多い。これは仕方ない。値に変換できるものは変換する。

「共有ブック」と共同編集の違い

構造の話のついでに、保存形式に関わるもう一点。

  • 共有ブック(古い機能) 同じファイルを複数人が開いて、あとで変更を統合する
  • 共同編集(新しい機能) クラウド上のファイルを、同時に編集する

古い共有ブックは、変更履歴をファイルの中に持つので、使っているうちに重くなる。そして競合したときの解決が難しい。テーブルや条件付き書式など、使えない機能も多い。

新しい共同編集は、OneDriveやSharePointに置いたファイルに対して働く。ファイルの実体はクラウドにあり、差分だけをやりとりする。

社内のファイルサーバに置いたxlsxを複数人で開くと、後から開いた人は読み取り専用になる。これは共同編集ではない。「◯◯さんが使用中です」というあれだ。

複数人で同時に触りたいなら、置き場所を変えるしかない。 ファイル形式の問題ではなく、置き場所の問題になる。

バージョン管理を、どうするか

最後に、いちばん困っている人が多そうなところを。

「売上表_最新.xlsx」「売上表_最新2.xlsx」「売上表_本当の最新.xlsx」。

これが生まれる原因は、上書きが怖いからだ。前の状態に戻せないなら、コピーを取っておくしかない。

対策は3つある。

① ファイル名に日付を入れる

売上表_20261014.xlsx のように、YYYYMMDDで入れる。名前順に並べると日付順になる。「最新」という言葉を使わない。

② クラウドのバージョン履歴を使う

OneDriveやSharePointに置けば、過去の版が自動で保存される。「以前のバージョン」から戻せる。コピーを作る必要がなくなる。

③ 元データと加工結果を分ける

元データは触らない。加工は別ファイルか別シートでやる。元が無事なら、やり直せる。

いちばん効くのは③だと思う。壊してはいけないファイルを、作業用と分ける。そうすれば、作業用のほうは何度でも壊していい。

ファイル名が増えていくのは、整理ができていないからではなく、戻せない不安が原因だった。そこを解消するほうが早い。


この記事は、まだ書きかけです

この記事は、公開してから足していく形にしています。調べたことを書いた本文がまず先にあって、あとから「聞き手と話し手の会話」「あとで思い出したこと」「読んだ人から教わった補足」が積もっていきます。

だから、同じURLでも半年後には別のものになっているはずです。もし一度読んだことがある記事なら、下の更新ログだけ見てください。増えたところが分かります。

更新ログ

  • 2026-10-14 公開(本文のみ。会話パートはこれから足します)