7/22/2016

Excel。TIME。深夜料金発生を知りたいので22時以降にマークをつけようとしたら…


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を忘れずに