プロが教える店舗&オフィスのセキュリティ対策術

エクセルの関数について質問です。

A1=出勤時間
B1=退勤時間
C1=休憩時間
D1=労働時間
E1=請求金額

で、
A2=18:00
A3=18:00
A4=18:00
B2=27:00
B3=23:00
B4=29:00
C2=1
C3=0
C4=1
D2=8
D3=5
D4=10
ここから本題です。
E2=¥13,000
E3=¥13,000
E4=¥15,000
になるように関数を教えてほしいです。

条件は
・D列が8時間以下の場合は¥13,000
・D列が8時間を超えた場合、残業1時間につき+¥1,000
D列が0時間の場合は¥0
です。

今試しでE2に入れている関数は
=MAX(SUM(COUNIF(D2,">=8"))*13000+SUM((D2-8)*1000),0)
です。
が、この関数だと
出勤18:00
退勤23:00
休憩0
の場合、労働時間が5時間になるわけですが、請求金額が0円で計算されてしまいます。

ここから知恵をお貸しください!
お願いします!

A 回答 (4件)

E2: =IF(D2,13000+1000*MAX(D2-8,0),0)

    • good
    • 1

=SIGN(D2)*13000+MAX(D2-8,0)*1000



かな。
    • good
    • 0

>=MAX(SUM(COUNIF(D2,">=8"))*13000+SUM((D2-8)*1000),0)


(´・ω・`)
MAX関数を使う意味と、SUM関数を使う意味が分からない数式ですね。

 SUM((D2-8)*1000)
の部分がマイナスになったときのことが考慮されていません。

自分なら…
 =COUNIF(D2,">=8")*13000 + MAX( D2-8 , 0 )*1000
とするかな。

・・・
ポイントは、定時と残業の時間は全く別の計算で求めるという考え方。
それを十分理解したうえで少し工夫し、No.1の回答のようにD2の値が「0」でなければ…としても良いと思います。
    • good
    • 0

8時間以下なら、例え1時間の労働でも\13,000貰える、という解釈で間違いありませんか??



=IF(D2<TIME(8,0,0),13000,INT((HOUR(D2))-8)*1000+13000)

かな。間違ってたらすみません。
時間を入力している場合、TIME関数(時、分、秒)やHOUR関数(シリアル値)で、データ型を変換してやるのがポイントでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!