文字列の数字や数式を”数値”や”数式”として扱うには書式を変更しないといけない

新規ブックを作成した際に、全てのセルの書式設定は「標準」になっています。「標準」書式の場合は数字を入力すれば数値として認識できますし、「=1+5」や「=SUM(A1:A3)」のような数式を入力すれば数式として認識され演算結果が表示されます。

ところが、入力した内容をそっくりそのまま表示させたい場合があります。そのような場合には「文字列」書式を使います。

「文字列」書式は使い方によってはとても便利ではありますが、数値と数式を入力したい場合は機能しません。「標準」書式や「数値」書式などを使う必要があります。ただ、そういうセルを探し出していちいち「標準」書式や「数値」書式に変換するのは面倒です。

ここでは、文字列書式のセルで、入力内容が数字や数式であれば、標準セルに変換して、数値や数式として認識できるようにするマクロを紹介します。


コード

以下のコードは2つの関数を利用しています。実行するのは1つ目のChangeCellFormatToStandard関数です。2つ目の関数はセルの再表示を行う関数です。

1つ目の関数を実行すると入力セル範囲の中で数字だけのセルや=で始まるセルを「標準」書式に変更して、変更後の書式で再表示します。書式を「標準」に変更するだけではセルの表示は変わらないため、2つ目の関数を利用しています。

2つ目のReloadFormat関数については「VBAでセルの書式変更を反映させる」で詳しく書いているためそちらをご参照ください。コードは参照先のものをそのまま持ってきています。

コードの内容はコメントに大体書いているのでその通りなんですが、補足を入れると、数式の判定を行っている条件文「ElseIf Left(r.Value, 1) = “=” Then」のところは若干仕方なしで書いています。

というのも、=(イコール)で始まるセルが全て数式のセルか、というと、そういうわけではないため、一律に標準セルに変更しない方がいい場合もおそらくあるとは思いますが、ただ、実際にセルに入力する場合で=から入力するような文章はほとんどないため、もうこれでいいや、というコードになっています。

HasFormulaプロパティを使って数式かどうかのチェックを入れることもできますが、そこまでやらんでも、というのがあるのでやってません。

使い方

アクティブシートで上のChangeCellFormatToStandard関数を実行するだけです。

実行すると、数字や数式で文字列書式のセルが標準書式になり、再表示されます。