プロが教える店舗&オフィスのセキュリティ対策術

 例えば宅配便の配達希望時間を羅列した表があって、「20:00以降は“夜間配達”」と戻したいとき、IF関数を使用すると思います。

 解説書によると、IFの式の条件には時刻の表示形式は使えないので「”」で囲み、「1」をかける。これで時刻表示がシリアル値になるため設定が早くなる。

とあるのですが、これだけでは意味がわからず質問させていただきました。下記の2点ほどご教示いただければ助かります。

(1)どうしてIFのの条件に時刻の表示形式は使えないのか?他の関数には使えるような気がするのですが。

(2)「”」で囲むのはなんとなくわかるとして、なぜ「1」をかけるのか。

シリアル値の知識(時刻の場合24時間を1で管理する)は一応あります。

 

A 回答 (3件)

(1)IFの関数というより、数式に時刻を使用することができないのではないでしょうか?


これは想像するに、時刻表示には「:」(コロン)を使いますが関数では「:」は範囲を指定する時に使用しますよね(例:A1:A10)。ですから数式に時刻の「:」を認めると範囲指定なのか、時刻なのか、収拾がつかなくなってしまいそうです。
(2)””で囲んで1を掛ける、についてですが。
””で囲むと文字列として認識されますよね。しかし””の中が本来数値ならば1を掛けることによって、文字列ではなく数値として認識されることになります。そのために1を掛けて数式として成り立つようにするのです。

想像の部分もあり間違ってたらすいません。

この回答への補足

わかりやすい解説ありがとうございました。よーくわかりましたが、(2)でもう1点できたらお伺いしたいことがありまして。その前に・・・

(1)時刻を数式に入れても計算できると誤った認識を持っていたようです。IFに限らず、数式に時刻は使用できないのですね。それからなるほど「:」は範囲指定にも使われていますね。納得です。

(2)ためしに””で囲んで1を掛けずにやってみましたところ、空白となり答はでてきませんでした。””で囲んで1を掛けてやると、無事正解が出てきました。

 ここでさらなる疑問が・・・””で囲んで1を掛けることによって、文字列ではなく数式として認識されるようになるのはどういう仕組みなのでしょう。理論などなく、ただ覚えておくといったたぐいのものでしょうか?

何度も申し訳ないのですが、よろしくお願いできれば幸いです。

補足日時:2005/01/06 23:06
    • good
    • 1

私が過去の解答で何度も言っていることの、エクセル関数の本質に係わることの、私見を述べます。


>どうしてIFのの条件に時刻の表示形式は使えないのか
IF関数は、エクセルの「関数」です。関数の中で扱う番地は、番地のセルに入っている「値」を問題にしているものです。一部の番地以外の引数も値を問題にしてます。
書式やコメントやセルに付随するデータ(情報)は、色々あるのですが、その中の「値」(Value)だけを問題にします。それに伴って、IFも値を聞く風になっています。TRUE、FALSEも各ソフトや言語で値が決まっています。
(エクセルの将来バージョンでは、書式も聞けるようにMS社はするかも知れないが、プログラムなども関数は値を返すのがいまは主流か。)
表示形式で変換している見た目の状態は、「値」ではありません。特に日付、時刻で相違が顕著です。
時刻もエクセルは24時間を1とする値で持ってますから
値で聞かないとなりません。
更に聞くなら、12時間を0.5と聞くので無く、もう少し時間らしく表現できないかと言う質問はありえます。
それは"12:00"です。0.5を12時と名前をつけておく方法とかもありそう。
>後半
=1+"12:00"
をやって見てください。1.5になりました。
*1しなくても良いようです。
エクセルの中で変換してくれていると考えなくても良いのでは。"12:00"で0.5と言う数値と扱うで良いのではないでしょうか。*1しても結果は変わらないのですが。
    • good
    • 2
この回答へのお礼

 詳細な解説ありがとうございました。参考にさせていただきます。

お礼日時:2005/01/06 23:44

こんにちは。

maruru01です。

No.1の方の補足になりますが。
>(2)「”」で囲むのはなんとなくわかるとして、
>なぜ「1」をかけるのか。
EXCELは、数値として認識出来る文字列を、四則演算の中に入れてやると、自動的に数値に変換してくれます。
時刻も、シリアル値という数値なので、四則演算の中に入れてやれば、数値に変換されます。
その数値に変換する方法の1つが「1を掛ける」ということです。
つまり、

"20:00"*1

ということです。
で、要点は値を変化させずに四則演算してやればいいわけですから、

"20:00"/1
"20:00"+0
"20:00"-0
--"20:00"

でもいいわけです。
(「--」は「(-1)*(-1)」、つまり-1を2回掛けるということです。)
さらに、関数を使用して、

VALUE("20:00")
TIMEVALUE("20:00")

でも出来ます。
(ただし、TIMEVALUEは24時間超には対応出来ません。)
ちなみに、

=IF(A1>"20:00","夜間配達","")

はだめですが、

=IF(A1-"20:00">0,"夜間配達","")

なら、うまくいきます。
これは先にA1との引き算(四則演算)をして数値(シリアル値)に変換されるからです。

>他の関数には使えるような気がするのですが。
少なくとも、「""」で括らずに使える関数はないはずです。
数式の手入力はもちろん、関数パレット上でも、
「"20:00"」
のようにしないとだめだと思います。
で、この場合は関数が自動的に数値(シリアル値)に変換してくれます。
    • good
    • 1
この回答へのお礼

 解説ありがとうございます。

 No.1さんにさらに、理論的にどうして「1」を掛けると数値として認識されるのかご質問させていただいたのですが、お答えいただいた下記の部分が少しヒントになりました。

>ちなみに、

=IF(A1>"20:00","夜間配達","")

はだめですが、

=IF(A1-"20:00">0,"夜間配達","")

なら、うまくいきます。
これは先にA1との引き算(四則演算)をして数値(シリアル値)に変換されるからです。

>要点は値を変化させずに四則演算してやればいいわけですから、

"20:00"/1
"20:00"+0
"20:00"-0
--"20:00"

でもいいわけです。

なるほど!そうですね。大変勉強になりました。お世話になりました。

お礼日時:2005/01/06 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A