FLOOP関数の動作について

スプレッドシート (Calc) について
返信する
p5430has
記事: 3
登録日時: 10月 31, 2010, 6:07 pm

FLOOP関数の動作について

投稿記事 by p5430has »

編集中に送信してしまいました。申し訳ありません。

勤怠表を作成していて、FLOOP関数で残業時間を算出させているところで、動作がおかしな日が二箇所出ました。

記述している関数は以下のものです。
=IF(C40="";"";IF(M40=TRUE();IF(N40=TRUE();$A$4-CEILING(C40;"0:30";1)-$C$1-$C$2-$C$3;FLOOR(D40;"0:30";1)-CEILING(C40;"0:30";1)-$C$1-$C$2-$C$3);IF(O40=TRUE();IF(N40=TRUE();$A$4-$B$2-IF(D40>=$B$3;$C$3;"");FLOOR(D40-$F$3-$C$2-IF(D40>=$B$3;$C$3;"");"0:30";1));"")))

おかしな動作をしているのは以下の部分です。
FLOOR(D40-$F$3-$C$2-IF(D40>=$B$3;$C$3;"");"0:30";1))

回避する方法があれば、ご教授ください。

--- 以下、シートの情報 -------------------------------------------------------------------------------
おかしな動作をしている部分は以下の日の「通常残業」の項目のところです。両日ともに残業時間が30分不足しています。
日付 曜日 始業  終業  休憩  時間内 通常残業 深夜残業
15 水 8:30  20:30 1:30  8:00  2:00
27 月 8:30  22:00 1:30  8:00  3:30

ほか日は期待通りの値を返しています。
日付 曜日 始業  終業  休憩  時間内 通常残業 深夜残業
1 水 13:00 18:30 0:10  4:30  0:30
2 木 8:30  20:15 1:30  8:00  2:00
3 金 8:30  21:00 1:30  8:00  3:00
         :
16 木 8:30  21:30 1:30  8:00  3:30
17 金 8:30  23:00 2:00  8:00  4:00  0:30
18 土 8:30  28:30 2:30        12:00 5:30


[記述している関数について]
C1:昼休み時間 60分
C2:休憩時間 10分
C3:休憩時間 20分
A4:通常残業時間帯終了時刻 22:00
B2:通常残業時間帯開始時刻 17:40
B3:休憩時間終了時刻 20:00
F3:定時終業時刻 17:30
C40:始業時刻
D40:終業時刻
M40:休日(true/false)
N40:深夜残業(true/false)
O40:通常残業(true/false)
--- 以上、シートの情報 -------------------------------------------------------------------------------

よろしくお願いします。
OpenOffice:3.2.1
WinVista
akionnpu
記事: 14
登録日時: 10月 9, 2010, 11:48 pm

Re: FLOOP関数の動作について

投稿記事 by akionnpu »

おかしいと思われる箇所を文字単位で選択して反転させてからF9を押下してみてください :super:
ツールチップに途中結果が出ます♪

取り消しはESCで ;)
OpenOffice.org 3.2.0.10 OOO320m12 / Linux version 2.6.32-25-generic (buildd@rothera) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
p5430has
記事: 3
登録日時: 10月 31, 2010, 6:07 pm

Re: FLOOP関数の動作について

投稿記事 by p5430has »

アドバイスありがとうございます。

中を見てみると、
  FLOOR(D40-$F$3-$C$2-IF(D40>=$B$3;$C$3;"");"0:30";1))
の「 D40-$F$3-$C$2-IF(D40>=$B$3;$C$3;"") 」は期待する値(4:00)となっていました。
FLOOR(;"0:30";1))でくくると「3:30」と30分削られてます。

FLOOPで時間を扱うには、別の関数を挟む必要があるのでしょうか?
OpenOffice:3.2.1
WinVista
akionnpu
記事: 14
登録日時: 10月 9, 2010, 11:48 pm

Re: FLOOP関数の動作について

投稿記事 by akionnpu »

=FLOOR(TIME(3,59.99999,0)+TIME(0,0,1),TIME(0,30,0),1)

誤差です。
実体はシリアル値なので。
一秒追加してください。 :super:

素直に丸める方がいいかも^^;
=FLOOR(MROUND(TIME(3,59.99999,0), TIME(0,1,0)),TIME(0,30,0),1)
OpenOffice.org 3.2.0.10 OOO320m12 / Linux version 2.6.32-25-generic (buildd@rothera) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
p5430has
記事: 3
登録日時: 10月 31, 2010, 6:07 pm

Re: FLOOP関数の動作について

投稿記事 by p5430has »

アドバイスありがとうございます。

=FLOOR(MROUND(TIME(3,59.99999,0), TIME(0,1,0)),TIME(0,30,0),1)

で、うまくいきました。

ありがとうございました。
OpenOffice:3.2.1
WinVista
返信する

“Calc”に戻る