通常ですと、Excelでシリアル値による時間を扱う際には計算誤差が生じる恐れを考えなくてはなりませんが、本件の場合では、時間休をシリアル値ではなく、時間(hour)単位で扱うため、計算誤差が生じる恐れを考慮しなくても済む分、処理が楽になる面があります。
しかしながら、7時間15分を1日として扱う必要がある事によって、計算誤差の処理など比べ物にならない程に、面倒な事になっています。
今仮に、Aさんの前年度繰越の年次休暇がB2セルに、1回目に摂った時間休の値が(時間[hour]単位で)D2セルに、2回目に摂った時間休の値がE2セルに、3回目に摂った時間休の値がF2セルに、それぞれ入力されているものとします。
同様に、Bさんの前年度繰越の年次休暇がB5セルに、1回目に摂った時間休の値がD5セルに、2回目に摂った時間休の値がE5セルに、3回目に摂った時間休の値がF5セルに、それぞれ入力されていて、
Cさんの前年度繰越の年次休暇がB8セルに、1回目に摂った時間休の値がD8セルに、2回目に摂った時間休の値がE8セルに、3回目に摂った時間休の値がF8セルに、それぞれ入力されているものとします。
そして、時間単位で各時間休の値が入力されているセルの1つ下のセルに、時間休の値を関数を用いて日時分に換算した値を表示させ、
同じく2つ下のセルには休暇日時の残の値を表示させるものとします。(添付画像を参照の事)
まず、D3セルとD4セルの書式設定の表示形式を[ユーザー定義]の
[<1]h"時間"mm"分";d"日と"h"時間"mm"分"
にして下さい。
次に、D3セルに次の関数を入力して下さい。
=IF(ISNUMBER(D2),D2/24+INT(D2/7.25)*(1-7.25/24),"")
次に、D4セルに次の関数を入力して下さい。
=IF(AND(ISNUMBER(D2),ISNUMBER(1/(IF(ISNUMBER(LEFT($B2,FIND("日",$B2)-1)+0),LEFT($B2,FIND("日",$B2)-1)*7.25,0)+(0&REPLACE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(ASC($B2)," ",),"と",),"間",),1,IF(ISNUMBER(FIND("日",$B2)),FIND("日",$B2),0),)&IF(AND(ISNUMBER(FIND("時間",$B2)),ISERROR(FIND("分",$B2))),"0分",""))*24>=SUM($C2:D2)))), (IF(ISNUMBER(LEFT($B2,FIND("日",$B2)-1)+0),LEFT($B2,FIND("日",$B2)-1)*7.25,0)+(0&REPLACE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(ASC($B2)," ",),"と",),"間",),1,IF(ISNUMBER(FIND("日",$B2)),FIND("日",$B2),0),)&IF(AND(ISNUMBER(FIND("時間",$B2)),ISERROR(FIND("分",$B2))),"0分",""))*24-SUM($C2:D2))/24+INT((IF(ISNUMBER(LEFT($B2,FIND("日",$B2)-1)+0),LEFT($B2,FIND("日",$B2)-1)*7.25,0)+(0&REPLACE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(ASC($B2)," ",),"と",),"間",),1,IF(ISNUMBER(FIND("日",$B2)),FIND("日",$B2),0),)&IF(AND(ISNUMBER(FIND("時間",$B2)),ISERROR(FIND("分",$B2))),"0分",""))*24-SUM($C2:D2))/7.25)*(1-7.25/24),"")
次に、B2~B4のセル範囲内にあるセルを結合して下さい。
次に、D3~D4の範囲をコピーして、E3~F4の範囲に貼り付けて下さい。(必要があれば、貼り付ける範囲を更に右方向に拡大しても構いません)
次に、D2~F4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。
以上で準備は完了で、後はB列に前年度繰越の年次休暇を入力してから、D列~F列の2行目、5行目、8行目に、摂った時間休の値を時間(hour)単位で入力しますと、その1つ下のセルに入力した時間休の値を日時分形式に変換した値が表示され、そのまた下のセルに休暇の斬日時が表示されます。
尚、この方法で表示する事の出来る休暇の日数は31日までで、それを超える日数を正しく扱う事は出来ませんので、注意して下さい。
お礼
ありがとうございます。今回は最も早くご回答いただいた方をベストアンサーとさせてください。