FLOOR/CEILING関数の代替関数です。
時刻に『小数誤差』が含まれていても正しく算出します。
[#VALUE!]
ktBoundaryTime( 時刻, 丸め分, 丸め方向, [Serial] )
返却値 ‥‥‥ Variant(Date) 型 時 刻 ‥‥‥ Date 型 丸め分 ‥‥‥ Integer 型 丸め方向 ‥‥‥ String 型 Serial ‥‥‥ Boolean 型(省略可 省略時:True )
時刻データを、指定した方法(15分単位切り上げ等)で丸めた時刻を返します。
「Serial 」引数を省略もしくは[True ]とすれば、シリアル値(Date 型)で返します。
[False ]を指定すると、分(Long 型)で返します。
時 刻 ‥‥‥ 24:00以上の時刻も指定可能です。
丸め分 ‥‥‥ 1分〜60分の範囲で丸めの単位を指定します。
丸め方向 ‥‥‥ U(切り上げ) または D(切り捨て)を指定します(小文字でも可)。
Serial ‥‥‥ 結果をシリアル値で返す(True /省略)か、「分」で返す(False )かを指定します。
時刻(シリアル値)は実数の小数部で表現されており、
という単位で刻まれています。更に、コンピュータで小数を表現する方式も影響して、
1時間= 1/24 ⇒ 0.0416666666666666‥‥‥ 1分 = 1/(24×60) ⇒ 1/1440 ⇒ 0.0006944444444444‥‥‥ 1秒 = 1/(24×60×60) ⇒ 1/86400 ⇒ 0.0000115740740740‥‥‥
「何らかの演算を通した時刻データ」と「直接その時刻を入力(もしくはTIME関数など
で生成)したもの」と比べると、僅かな小数誤差が含まれている場合が有り得ます。
この小数誤差を含んだ『時刻』にFLOOR/CEILING関数を施すと、期待通りの
結果が得られないケースが出てきます。
『ktBoundaryTime』は、誤差を取り除き、【通算分】に変換した上での整数演算によって、
このような場合でも正しく算出できるように工夫しています。
ktBoundaryTime 関数内では、小数誤差が表れないように『分』に変換した上で整数演算で
処理し、結果を返す段階でシリアル値に変換しています。しかし、ktBaundaryTime で得られた
日々の結果には小数誤差が無くても、それを集計(月合計や年合計など)すれば、そこには
再び小数誤差が含まれてします。ktBaundaryTime で返す内容も『分』の整数のままにすれば、
集計したとしても、そこには小数誤差など存在しません。ただ、このままでは、時間データとして
利用できませんので、下記のようにしてシリアル値(または時刻数値)に変換して下さい。
(ktBaundaryTime を使うセル(列)を非表示で隠して、シリアル値に変換した結果だけ表示させます)
「Serial=False 」指定により『分』で結果を得た場合、
(1) シリアル値にするには、[1440]で割ります(表示形式を時刻タイプへ)。
(2) 時給計算などを計算する為に時間を【数値(7:45→7.75)】で得たい場合は、
[60]で割ります(表示形式は標準または数値)。