数値・数値文字列・文字列の関係について
これまでの実験で、次のような現象が確認できました。
※青文字は表示形式、赤文字は実際のデータの形式を表しています。
●表示形式を標準から文字列に変更したとき、表示形式は文字列になるが、実際のデータは数値の性質をもつ数値文字列に変更されていた
●その後、数値文字列のセルを操作すると、数値文字列が文字列に変換された
●表示形式を文字列から標準に戻すと、数値文字列は問題なく数値に戻るが、文字列のデータは、表示形式は標準に戻っても、実際のデータは文字列のままだった
●その後、文字列のセルを操作すると、データが数値に変換された
つまり、セルの表示形式で変更できるのは、文字通り「表示する形式」だけで、実際のデータの形式(データ型)は、セルを操作することで初めて変更される、ということです。この関係をまとめて図に表すと、次のようになります。
※ExcelVBAでデータ型を調べてみると、数値と数値文字列は、内部的にDouble型(倍精度浮動小数点型)で扱われていることがわかります。一方、文字列は、内部的にString型(文字列型)で扱われています。 |
単純に表示形式を標準に戻せば良いのでは?と思った方の中には、数値文字列が「数値と文字列の中間的なもの」というイメージを持った方がいらっしゃるかもしれません。しかし、上図のとおり、これらの関係は、「表示形式」の違いと実質的なデータ型の違いという観点で見る必要があります。
初めから表示形式を文字列に設定した場合
ちなみに、セルの表示形式をはじめから文字列に設定した場合、入力されたデータは文字列として扱われます。当然、こういったセルに数値を入力すると、初めから文字列として扱われます。数式を入力すると、入力した内容が文字列として表示されるだけで関数として機能しません。
根本的な問題解決に向けて
セルの表示形式の変更だけで「数値」と「文字列」を変更できるわけではないので、数値が入力されているセルの表示形式を、むやみに文字列に変更することは避けるべきです。
数値を左詰めで表示したいだけなら、表示位置を左詰めに変更すればよいだけのこと。
数値を厳密に文字列、つまり「数字」として扱いたい場合、関数で利用しない数値であることを確認して、初めから表示形式を「文字列」に設定しておきましょう。
※この場合、数字を入力したセルに、いちいち緑色の三角形が表示されます。エラーチェックオプションで非表示にすることもできますが、他の場所のエラーを関知できなくなるので、ちょっとうるさくても表示しておいた方が良いと思います。