計算式クラスターで時刻の計算が正しく計算処理されない
時刻クラスターは内部的にシリアル値でデータを管理しています。
シリアル値は「1900年1月1日」を「1」とし、その日からの通算日数と時刻を数値として表したものです。
時刻クラスターや時刻計算クラスター、年月日クラスター等は内部的にシリアル値で管理されています。
これが影響して計算式クラスター上に計算結果が正しく表示されていないか、想定通りに計算処理ができていない可能性があります。
以下のいずれかの対処をご検討ください。
【時刻計算クラスターを活用する】
2つの時刻クラスターとの差分を算出する単純な時刻計算であれば、時刻計算クラスターを活用する方法があります。
時刻計算クラスターの詳細につきましては下記のマニュアルをご参考ください。
# 参照マニュアル
i-Reporterで使用できるクラスター種別の詳細 > クラスタ―種別詳細 > 時刻計算
【計算式クラスターの「計算結果データ型」を「年月日・時刻」にする】
ConMas Designerで計算式クラスターの入力パラメータ設定を開き、
「計算結果データ型」を「年月日・時刻」にします。※ 下記赤枠参照
これにより、計算結果がシリアル値となる場合は「HH:mm」等の形式で計算結果を表示できます。
表示形式は上記青枠の「日付・時刻 書式」から変更します。
なお、計算結果が24時間を超過する場合は正しく時刻を表示することができません。
計算結果が24時間を超過することが想定される場合は次項の【シリアル値を数値に変換する】をご参考ください。
【シリアル値を数値に変換する】
シリアル値は1日=24時間を「1」として扱う数値であり、時刻は小数値で扱います。
そのため、例えばシリアル値を「分」単位に変換したい場合は「シリアル値 * 24 *60」の計算処理を行うことで可能です。
このようにして数値の変換を行いながら、24時間以上の計算結果を出力するように
計算式を作成してください。
! 注意事項
i-Reporterでは小数計算を行うときに誤差が発生することがあるため、
これを回避するためROUND関数を使用してください。
例えば、以下のように「分」単位に変換してから
ROUND関数で小数を四捨五入することで、誤差の発生を回避できます。
=ROUND(【シリアル値】* 24 * 60 , 0)
# 参照マニュアル
帳票定義を作成する > 帳票定義Excelファイルを準備する > EXCEL関数機能 > EXCEL関数 小数計算の誤差と回避方法