2009年01月07日

強制変換

ここで、VALUE関数の代わりに「+0」や「*1」でもいい、と書きましたが、これって演算操作としては「.Value = .Value」みたいな、一見意味のない操作ですよね。
なぜこれらがVALUEの代わりになるのでしょうか?

Excelの数式には、行われた操作に応じて、データの型を自動的に変換してくれる機能があります。
文字列として与えられたデータであっても、それが数値や日付などと見なせる書式になっていれば、演算操作を行うことによって、自動的(強制的)に数値に変換されるわけです。
他の演算操作があるならそれでいいのですが、他に演算を行わない場合は、数値に変換するためだけに、わざわざ「+0」などの操作を行う必要があるケースもあります。

また、SUMやAVERAGEなどの関数でも、引数としてセル参照ではなく値を直接指定した場合は、その文字列が、変換可能な数値に自動的に変換されます(変換が不可能な場合はエラーになります)。

数式の中で日付や時刻の値を直接使用したい場合は、" "で囲んで文字列として与えることで、この自動変換機能のお世話になることができます。
たとえば、
=AVERAGE("2009/1/10","2009/1/6")
という数式では、「2009/1/8」を意味するシリアル値の39821が返ります。

もっとも、日付や時刻を表す文字列がすべて数値に変換されるわけではありません。
たとえば、「2009年1月7日」はOKですが、「平成二十一年一月七日」はNG、とか。
この辺の基準は、「標準」の表示形式のセルに入力したときに、自動的に表示形式が変更される種類のデータとほぼ同様です。


ところで、「+0」や「*1」とは反対に、数値データを強制的に文字列形式に変換する操作というのもあります。
日付などの書式設定が必要な場合はTEXT関数を使う必要がありますが、数値のままで文字列にすればよいのなら、後ろ(別に前でもいいのですが)に「&""」を付ける、というのが簡単な方法です。

私は最近、この方法を、VLOOKUP関数で参照テーブルから文字データを取り出す際に、該当するセルが未入力の可能性がある場合などに、よく利用しています。

このようなケースでは、単にVLOOKUPを使うだけだと、未入力のセルの値が「0」と表示されてしまいます。
0ではなく空白を表示させたい場合は、IF関数を利用したり、シートの表示設定やセルの表示形式で0を表示させないようにするといった手も考えられますが、上記の「&""」を使う方法が、結構手軽で便利なのではないかと思います。
posted by 土屋和人 at 23:17| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/25267097
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック