ktBoundaryTime

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]で割ります(表示形式は標準または数値)。

Home  kt関数 Top  kt関数 Ref  Back Page  Next Page


角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2001 Allrights Reserved.