現象
SIerが大好きなExcelファイル(.xlsxファイル)。しかし編集を重ねるうちにいつの間にか大量のスタイルを抱えたメタボファイルになってしまいます。
- ちなみに、こうなってしまう原因の一つに「保護されたビュー」機能があるようです。
(名前定義もマクロもないブックが重くなる原因
https://qiita.com/atmospheri/items/a3d0adb9bc82a4c6c8a2 )
やたらと重いし下手に顧客名などを推測できる名前が含まれた状態でよそに出したら情報漏洩事故です。
ということで不要なスタイルは削除するわけですが…消えない。
秘伝のタレと化した大量のスタイルの中には往々にして、リボンから個別に削除してもVBAからDeleteしても決して消えないスタイルがあるものです。
原因
このようなことが起きる原因のひとつとして、スタイルの名前の末尾に何らかの原因でスペースが入っている場合があります。
ただしExcel上でスタイルの名前を直接変更しようとしても元のスタイルとは別に「消せるスタイル」が複製されてしまい、うまくいきません。
対処方法
注意:.xlsxファイルの内部構造を壊してしまうおそれがあるので事前にファイルのバックアップを取っておくこと。
用意するものは以下の2つ。
・ 7-zip(zipファイルを編集→更新できるアーカイバであれば他のものでも可)
・ サクラエディタ(正規表現で後方参照を使った置換ができるエディタであれば他のものでも可)
※サクラエディタは7-zipのツール→オプション→外部ツールから編集用外部プログラムとして設定しておく必要があります。
-
エディタで見ると以下のように名前の末尾にスペースが入ったスタイルが見つかるはずです。
そこで、以下の条件で「すべて置換」を行います。(下記の正規表現では念のため先頭にスペースが入っている場合も削除しています)
項目 | 値 |
---|---|
置換前 | name=" *(.*?) *" |
置換後 | name="\1" |
正規表現 | オン |
-
ファイルを保存してエディタを閉じます。
-
7-zipを閉じます。
-
Excelで.xlsxファイルを開き、不要なスタイルを削除します。
##備考
とにかくまずExcelファイルを外部に出すときは「ドキュメント検査」機能を使いましょう。
ドキュメント検査で指摘されるのに見つけにくい隠れデータとしては他にも以下のようなものがあります。
- Visible=falseが設定された名前の定義
- Visible=xlSheetVeryHiddenが設定されたシート
xls形式はもう捨てましょう…