2013年1月2日水曜日

[Excel]OpenOfficeとMSExcelの日付の設定

とあるデータをMicro soft ExcelからOpenOffice Calcに移行した時に、24時間を超えたかどうかの判別を行っている箇所があったのだが、計算が合わなかった。
調査したところ、アプリケーション毎にシリアル値の設定方法が異なっているようだ。


◆対処方法

A1のセルに比較したい値の数値(日付)があり、その値を特定の時間帯と比較して判別したかった。

計算式は以下:

=IF(TEXT(A1,"m/d hh:mm")>="1/1 00:00","24時間を超える","24時間を超えていない"))

この状態だとMicro soft ExcelとOpenOffice Calcでは計算が異なってしまう。
なぜなら、それぞれのアプリケーションでシリアル値の計算方法が異なるため、
TEXT関数での出力結果に違いが生じてしまうからだ。
具体的に述べると、Micro soft Excelだと、シリアル値"0"を設定した時に"1/0 00:00"という扱いがなされ、OpenOffice Calcだと、"12/30 00:00"という扱いがなされてしまっていた。
そこでMicro soft ExcelでもOpenOfficeでも動作するよう修正してみた。

修正版:
B1:=TEXT(1,"m/d hh/mm")

=IF(TEXT(A1,"m/d hh:mm")>=B1,"24時間を超える","24時間を超えていない"))

修正版では特定の時間帯の計算をシリアル値で行い、その値を元に比較対象の時間と比較を行っている。
これでMicro soft ExcelでもOpenOffice Calcでもうまく動作した。


※ちなみに関数の引数の区切り方は、Micro soft Excelだと「,」、OpenOffice Calcだと「;」です


結局の話、直打ちで計算するなよ……ということ。

0 件のコメント:

コメントを投稿