Excel。深夜料金発生を知りたいので22時以降にマークをつけようとしたら…
<IF関数+条件>
「IF関数を使っているのですが、ちゃんと動いてくれませんので、先生!助けて~」
ということで、
会社に赴いて早速、そのファイルを見せていただきまして、
なるほど…こりゃ、確かにクセがあるのでしょうがないなぁ~ということがありましたので、
それを今回ご紹介していきます。
そもそも、どんなものだったのか?というと、
なんでも、深夜料金発生のようなファイルだそうでして、
終了時間が22時以降かどうかを判断したかったというもの。
下記のようなファイルを作りたいわけです。
別に終了時間が22:00以上だったら○と表示するようにIF関数を作ればいいだけじゃないの?
と思うのが普通なのですが、
実は、論理式。つまり質問文の条件が厄介なんですね。
では、D3をクリックしてIF関数ダイアログボックスを表示しましょう。
論理式に、C3>=22:00 と入力すると、正しくありません と表示されていますよね。
OKボタンをクリックしても、当然、正しくありませんとメッセージが出ます。
そうか!
22:00の前後に”(ダブルコーテーション)を付けてないから正しくないといってくるのだと思って、
”(ダブルコーテーション)を付けてみましょう。
今度は、数式としては大丈夫のようですからOKボタンをクリックしましょう。
あれれ!完成と思ったら、なんと、D3に○が表示されていません!
オートフィルで数式をコピーしてみても、表示されません。
D3のセルをアクティブにして、念のため数式バーで数式を確認しても、
問題はないように思えます。
なのに、結果がおかしい。
そう、これが、今回のトラップだったのです。
これで、助けて~メールが来たわけですね。
実は、”(ダブルコーテーション)で時間を囲ってしまうと、
【時刻】だったのが、【文字】になってしまうのです。
つまり、C3は時刻なので、シリアル値としては、かなり小さくなっているわけです。ですので、その時刻である、
シリアル値と文字である、22:00を比べても文字である22:00を越えることはないわけです。
ですので、空白が算出されてしまったわけなのです。
では、どうやったら、いいのでしょうか?
それは、
”(ダブルコーテーション)で囲った時刻に*1を付けてあげるだけで解決してしまいます。
とりあえず、D3の数式を次のように修正しましょう。
=IF(C3>="22:00"*1,"○","")
そして、オートフィルで数式をコピーしてみましょう。なんと、ちゃんと算出することが出来ました!
なぜ、*1をしたら算出できたのか?というと、
“(ダブルコーテーション)で囲うと【文字】にはなるのですが、
これに*1をつけてあげると、シリアル値に変換してくれるのです。
なので、シリアル値同士の比較となったことで、算出することが出来たわけです。
ただし、D1に22:00と用意しておいて、そのセルを使うと話は別になります。
D3の数式を、
=IF(C3>=$D$1,"○","")
と、修正しても、きちんと算出することが出来ましたね。このようにセルを使用した場合と、
直接数式を作る場合で条件が変わってきますので、注意が必要ですね。
困ったときは、*1を忘れずに