Excel で表を作るとき、
どういうことか説明しよう。通常、Excel のデフォルトフォントは MS Pゴシックの 11 ポイントであるが、話を簡単にするため、 まずは等幅フォントの 10 ポイントを使用したケースを考える。
画面上では通常、1 ポイント=(4/3) ドットとして表示される。
これは、画面のプロパティ→設定→詳細→全般、で 「小さいフォント」を指定した場合で、この場合、画面の解像度は 96dpi であるとして計算される。「大きいフォント」の場合は 120dpi で計算されるので、1 ポイント=(5/3) ドットとなる。
ところがこの 4/3 という数字が曲者である。この換算比率でいうと、 10 ポイントの全角文字の幅は 13.333... ドットなので、Windows ではこれを四捨五入して 13 ドットで表示する。ところが半角文字は 6.66... ドットなので、四捨五入すると 7 ドットである。これが、 等幅フォントなのに半角文字と全角文字の幅が正確に 1:2 にならない場合がある所以である。
では、正確に 1:2 になるケースとはどういう場合か? 上の 4/3、5/3 という数字から分かるように、フォントのサイズが、 「小さいフォント」の場合で 3 ポイントの倍数(3、6、9、12…)、 「大きいフォント」の場合で 6 ポイントの倍数(6、12、18、…) の場合である。では、それ以外のサイズ(7 ポイントとか、10.5 ポイントとか) でもきちんと 1:2 で表示されるようにするためには? これは、 きちんと 1:2 になるように字間を調整してくれるソフト (たとえば、秀丸はそうであるが、Excel にはこの機能はない)を使うか、あるいは、 画面のプロパティで表示サイズを 144dpi にするしかない。
試しに下の文章を見てほしい。等幅フォントのはずなのに、 文字の大きさを変えると(Netscape 4.7x ならメニューバーから表示 → 文字を大きく/小さくする、IE 5.0 なら表示→文字のサイズ) 半角文字と全角文字が同じ幅になったりならなかったりするのがおわかりいただけると思う。
1234567890123456789012345678901234567890|←半角数字 12345678901234567890|←全角数字 iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii|←半角小文字のアイ AAAAAAAAAAAAAAAAAAAA|←全角大文字のエイ |←半角スペース WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW|←半角大文字のダブリュー |←全角スペース 日本語日本語日本語日本語日本語日本語日本|←漢字
プロポーショナルフォントでも結局のところ話は同じである。 プロポーショナルフォントを画面表示する場合、 元のアウトラインフォントの字形から画面上でのドット数を計算すると、 どうしても端数が出る。この端数を四捨五入すると、どうしても誤差が出る。 誤差が累積すると(累積しないようにすることもできるが、 手間がかかるので嫌われる傾向にある)、長い文章では 1 文字分、 もしくはそれ以上の狂いとなって印刷に現れる、というわけである。
と、ここまで読めば、解決策は明らかだろう。
第一に、できるかぎり等幅のフォントを使うこと。 第二に、できれば文字サイズを 12 ポイントに指定すること。それができない場合 (例えば、印刷して誰かに提出する書類の場合で、 先方がすでに用意している書式がデフォルトのMS Pゴシックを使っている場合など)は画面表示を信用せずに印刷プレビューや FinePrint などの仮想プリンタへの出力をこまめにチェックすること (印刷プレビューはけっこう正確に表示してくれる)。
もっとも、文字がセルからはみ出してしまう問題への対策としては、 セルの書式設定で「縮小して全体を表示する」 を指定するという逃げ道もある。むしろこちらのほうが、 狭い幅に多数の文字を詰め込まなければいけない場合に、 はみ出しの心配をすることなく MS UI Gothic (かな文字の幅が狭くなっているので、こういう用途には狙い目である) を使えるという意味で、有利かもしれない。
同じ Office ファミリーでも、Word ではこのような現象は起こらない。 Word(に限らず、字間を自由に設定できるソフト全般)では、 ソフト側が表示の時点で「本来、それぞれの文字が印刷されるべき位置」 を計算し、それにあわせて適切に字間にスペースを空け、若しくは詰め (カーニング kerning)を行ってくれるからである。 そこまでしてこそ真の WYSISYG である。
ある日、社内で別のところで作業をしている偉い人(T 部長:仮名) からメールが舞い込んできた。
実は、T 部長の依頼で、とある社内文書テンプレート (Excel 用のファイルになっていて、これに必要事項を書き込んで T 部長にメールで提出して決裁を受ける)の改訂作業をしたのであるが、 今回舞い込んできたメールによると、 改訂前のファイルにごく簡単な修正しかしていないのに、 T 部長の手元ではファイルサイズが改訂前の約 2 倍に膨れ上がっているという。さてはなにか変なことをしただろう、 メールでのやりとりが不便になるから元のサイズに戻せ、 というのがそのメールの内容であった。
ちなみに、膨れ上がった後のファイルのサイズは約 250kB。 うちの社内メールは 1 通 1MB までなのでいちどに何枚も送れなくなるし、 ただでさえ容量制限ギリギリで動かしている T 部長のメールボックス(10MB)が溢れてしまう。
そんなばかな、私は特に変なことした覚えはない。もちろん、 「本人がそう思っているだけで実はとんでもないことをしでかしている」 というケースも往々にしてある(たとえば、「新・闘わないプログラマ No.19」など参照)のだが、 今回の私の場合、単に一部のセルの式を変更して上書き保存しただけである。 しかも、私の手元にも控えが残っていて、 そちらは改変前とほぼ同じサイズである。
というわけで、問題が発生したのは、 私から T 部長に作業がバトンタッチしてから、という可能性が濃厚である。 とはいえ、T 部長は偉い人だし、遠隔地にいるし、しかも、 社内でも一部の人しかアクセスできない機密情報を扱っているしで、 「T 部長のパソコンを触らせろ」と頼むわけにもいかない。
というわけで、なんとか手元で解決しなければならない。
ところで、Word の場合、「高速保存」 の機能を使うとファイルサイズが大きくなる、というのが有名である。 これは、「高速保存」では元のデータをほとんど上書きせずに、 その末尾に元のデータとの差分を追加するため、 何度も変更を繰り返すとそのぶんだけファイルサイズが大きくなる、 というカラクリである。この場合の対処は簡単で、 高速保存のオプションを外して上書きすればよろしい。
そもそも、高速保存が効果を発揮するのはファイルサイズがとんでもなく大きい場合に限られるし(そもそも、 そういう場合は安全性を考えてファイルの分割を考えるのがスジだ)、 しかも、高速保存した場合、標準の Word の機能にあるかどうかは不明だが、 原理的には、ファイルに保存した後であっても、 以前に削除した文面が復旧可能なので、 「機密性のあるデータから機密部分を削除して組織外部に提出する」 などという場合には到底おすすめできない。 (だから、高速保存はいっさい使わないのが吉である。)
ところが、Excel にはそれらしき機能はない。
というわけで検索である。検索して見つかったサイトによると、Excel では、同じ拡張子
.xls
でもいくつかの保存形式があり、それによると、
「Excel 97-2000 および 5.0/95 ブック」形式は、Excel 97
以降用のデータと Excel 95 以前用のデータを両方持っているため
どちらでも開くことができ、しかも Excel 97 以降の新機能を使ったデータが失われずに済む、しかしファイルサイズは大きくなる、
ということであった。
そこで問題のファイルを調べてみる。双方のファイルについて、 いったん開いてから「名前を付けて保存」のダイアログを開いてみると …… やはり、改変前のオリジナルは「Excel ブック」 (=97 以降でしか開けない形式)で、 T 部長から送られてきた改変後のファイルは「Excel 97 および 5.0/95 ブック」(手元の Excel が 97 なので、「97-2000」とは出ない)であった。 デフォルトの保存形式が「97 および 5.0/95」になっているマシンでは、 「Excel ブック」で保存されていたファイルを開いて上書き保存する際には、 黙って「97 および 5.0/95」形式にしてしまうという仕様は兇惡である。
というわけで設定変更あるのみ。メニューバーからツール → オプションを選んで、「移行」タブの「ファイルの保存形式」タブである。
さっそく T 部長に報告したら、 「Thanks.」とだけ書いた素っ気ないメールが届いた。 T 部長らしいというかなんというか…
あとで T 部長と同じ部署の M 部長(仮名)に聞いたところによると、 その書類の一部を親会社に提出する際に、親会社ではいまだに Excel 95 が標準らしいので、それへの対応ではないかとのこと。 なんだかなあ…