お疲れ様です、田村です。Excelで、割合を計算するセルをコピーして別のセルへ貼り付ける作業をしていました。貼り付けた結果もパーセント表示で扱いたいのに、計算結果が0のセルだけ「0.00%」にならないことがありました。
作業の流れは「割合の計算式が入ったセル → コピーして貼り付け → 貼り付け先の表示桁数を整える」です。ところが、小数点以下の桁を増やすボタンを押しても変わらず、正常なセルからパーセントの書式だけをコピーしても直りませんでした。
原因は、コピー元の計算式がエラー時に返す値でした。数値の 0 ではなく、引用符付きの "0" になっていました。 見た目はどちらも0ですが、後者は文字列です。数値として返す形に直し、この割合表示の問題は解消しました。

私が確認した順番
- 貼り付け先のセルで、小数点以下の桁数を増やした。変化なし。
- 正常な割合セルから、書式だけをコピーした。それでも変化なし。
- コピー元の計算式を見直し、
IFERRORのエラー時の返り値が"0"になっていることに気づいた。 - 数値として使うゼロを
0に直した。
最初の2つは「どう表示するか」の操作でした。文字列として返ってきたゼロを、数値のゼロへ変える操作ではありません。Microsoftの説明でも、数値の表示形式は見え方を変えるもので、セルの実際の値を変えるものではありません。
なぜ式が "0" になっていたのかは分かっていません。 コピー操作やExcelの更新が式を書き換えたと断定はできません。
0 と "0" の違い
次の式は、違いを説明するために作った再現用の例です。私の元ファイルの数式をそのまま転載したものではありません。たとえばB1が0で割り算がエラーになった場合、IFERROR は最後の引数を返します。
| エラー時の指定 | 式の例 | 割合表示にしたとき |
|---|---|---|
| 数値のゼロ | =IFERROR(A1/B1,0) |
数値0として「0.00%」などにできる |
| 文字列のゼロ | =IFERROR(A1/B1,"0") |
見た目は0でも文字列。数値の表示形式だけでは変わらない |
IFERROR は、先の計算がエラーになったとき、第2引数を返します。Microsoftの関数説明にも構文が示されています。
同じ現象に出会ったら、貼り付け先の書式を何度も変える前に、コピー元の数式バーで 0 に引用符が付いていないか確認すると早いです。数値として扱いたい場所では、エラー時に返す値を 0 にします。すでに値として貼り付けたセルもあるなら、そのセルに残った文字列のゼロは別途見直します。
今回の学び
見た目が同じ0でも、数値と文字列では後の表示や計算の扱いが変わります。私は書式を何度も直そうとしてから、ようやく数式の "0" に気づきました。
なお、同じブックでは後にVBAのコピー処理や別の表示崩れも話題になりましたが、そちらの原因は確認できていません。この記事で「直った」と書けるのは、割合セルのゼロが文字列になっていた問題までです。