[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『有給休暇の付与日数の計算式』(ケー子)
お世話になります。
有給休暇の付与日数の計算式についてお尋ねします。
2004年4月1日入社の方は2005.4.1に11日、 2006.4.1に12日、 2007.4.1に14日、 2008.4.1に16日、 2009.4.1に18日、2010.4.1以降は毎年20日与えられます。
タイムカードの日付がN7:N37まで、11日から始まって翌月10日迄入っています(3月11日〜4月10日は4月分、4月10日〜5月10日は5月分…)。
セルW4に次の式をいれて付与日数を出すようにしました。
=IF(COUNTIF(N7:N37,"4/1"),CHOOSE(YEAR(N7)-2004,11,12,14,16,18,20),CHOOSE(YEAR(N7)-2004+1,11,12,14,16,18,20))
4月分はセルN7の年が2005年になると"11"となり5月分のタイムカードの付与日数が翌年(2006年)の付与日数の"12"になりうまくいくのですが、
N7を2006年にすると4月のシートが"14"になってしまい、なるべき数字の"12"になりません。
2006年にしても5月のシートで翌年(2007年)に与えられる数字の"14"で問題ないようです。
上の式のどこがおかしいのか判りません。ご教示お願いいたします。
上の式はCOUNTIF(N7:N37,"4/1") の部分がTRUEになることはないので、 必ず、CHOOSE(YEAR(N7)-2004+1,11,12,14,16,18,20)で算出されてしまいます。 別案の式ですが、以下の式で合ってますか。
=LOOKUP(N28,{38078;38443;38808;39173;39539;39904;40269},{10;11;12;14;16;18;20})
式中の5桁の数値は各年度の4月1日のシリアル値です。 38078 2004/4/1 38443 2005/4/1 38808 2006/4/1 39173 2007/4/1 39539 2008/4/1 39904 2009/4/1 40269 2010/4/1
(川野鮎太郎)
日付はシリアル値で入力されているものと思われますが、 =IF(COUNTIF(N7:N37,"4/1")・・・ この部分の"4/1"は、本年の"4/1"と認識されているようです。 したがって、来年になればこの式で正しい結果が得られると思います。 ためしに、システムの日付を来年にして試してください。 再計算した時点で、値が変わることが確認できると思います。 (Excel2003での確認)
ちなみに4月1日の判定の部分をを、=IF(MONTH(N28)=4,・・・のようにすれば、 システムの日付に関係なく計算できます。 ケー子さんのレイアウトでは、年度替りの月は必ず3月11日からスタートし、 N28セルに4月1日になりますね。 また、翌月はN28セルは常に5月2日になりますから、 この式でも大丈夫だと思いますがいかがでしょうか (sato)
川野鮎太郎いつもお世話になりありがとうございます。再度の質問ですみません。勉強のためお聞きしたいのですが、COUNTIF(N7:N37,"4/1") の部分がTRUEになることはないというようなことは、頭で考えないで、なにかDebugツールのようなものでCOUNTIFの値がどうなっているかを目で見ることはできないでしょうか?よろしくお願いいたします。(ケー子)
みやほりんが 未解決ログ解消を目的に 2007/05/15 19:20 ごろ、投稿しました。 トピ主の[ケー子]さんの投稿は2005/05/31/ 11:49:44でした。 >なにかDebugツールのようなものでCOUNTIFの値がどうなっているかを目で見ることはできないでしょうか? この部分にのみ回答します。 Excel2003では ツール>ワークシートの分析>数式の検証 と言う機能で数式の計算する段階を追って計算結果を確認することが出来ます。 (みやほりん)(-_∂)b
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.