過去の桐井戸端BBS (桐ver.8)
10616 ある期間の土・日以外の日数を数えるには フランスパン 2001/03/31-12:52
いつも、勉強の為にみています。
さて、ある期間の土曜日 日曜日以外の日数を数える方法があったら、教えて下さい。
よろしく、お願いします。
10620 Re:土・日以外の日数を数えるには 宮城 2001/03/31-14:31
記事番号10616へのコメント
フランスパンさん、こんにちは。

当然、年月日項目があるんでしょうから、曜日項目を追加します。
項目計算式に、#曜日([年月日項目])。これで「土」以外、「日」以外と二段絞り込んで
レコード件数を数えればそれまで(もちろん、関数でですよ。一発で絞ることもできます。)

しかし、土日だけでいいんですか? 一般的には祝日も問題になりますが。
私のところのダウンロードコーナーには「成人の日」「体育の日」、
学校関係土曜日処理を考慮した「暦」を公開してますので
(ことわっておきますが、休日判定だけです。)、よろしければみて下さい。

(それも来年からは要修正みたい。月曜が休みになって、どれほどの人が休み増・出費増になるんだろう?
プログラムとか3年日記とかの修正の費用増はあるわなあ。正直いって迷惑。)

10628 休日以外の日数を数えるには 佐田 守弘 2001/03/31-23:40
記事番号10616へのコメント
フランスパンさん
御質問の件は土日以外の日数との事ですが、ちょっと一般化すると、祝日の他に、創立記念日や夏季休暇といった
その会社独自の休日も考慮する必要があるかと思います。

この様な場合には、計算式での処理はできませんから、カレンダーを作る必要があります。
これは単に休日に相当する日付と、休日の名称の一覧表を作ります。
(名称を入れるのは、メモと表引きの時に使うためです)

●土日や振替休日はどうすべきか
確かに土日は関数で計算されます。また振替休日も、ちょっと面倒な計算式になりますが、
計算できない訳ではなさそうです。
(月曜日であり、かつ前日が祝日なら休日とする、など)
但し、実際にはなかなか計算式通りには鳴らない場合もあります。

私の勤務先の場合で言えば、年間休日数が一定になっているので、どこかに調整が入ります。
そしてどの様なカレンダーとするかは、労使協議で決まります。

よその会社ではどうか分かりませんが、一般的にいえば、年間のカレンダーを作るのが便利ですし、間違いありません。

●休日かどうかの判定
#表引き([日付],=,休日表,[日付],[休日名])
で休日名が返されたら休日、未定義値が返されたら勤務日になります。

佐田守弘(KS-00119)
10645 Re:休日以外の日数を数えるには フランスパン 2001/04/02-21:28
記事番号10628へのコメント
佐田さん、宮城さん、早速のご指導有難うございました。参考にさせていただきます。
さて、次の場合は、どうすれば良いか教えて下さい。
表編集状態で、最初の項目に始まりの日付データ、次の項目で終わりの日付データーを入力し
3番目の項目に、土日以外の日数が表示されるようにするにはどうしたら良いのでしょうか。
つまり、Excelのnetworkdays関数みたいな関数は、ないでしょうか。
よろしく、ご指導ください。


10648 Re:休日以外の日数を数えるには 佐田 守弘 2001/04/02-23:35
記事番号10645へのコメント
フランスパンさん
>つまり、Excelのnetworkdays関数みたいな関数は、ないでしょうか。
ありません。

ではどうするかですが、前回述べた方法と同じで、
@まずはカレンダの様な表を作ります。
Aカレンダの表から、始まりの日以降を絞りこみます。
B次いで終の日までを絞りこみます。
C次にこの中から週日あるいは休日でない日を絞りこみます。
Dそのレコード数を数えます。
で行います。
手作業でもできますが、一括処理あるいはイベントを使うのが良いでしょう。
履歴で操作してみて、主要部分を取り出せば、目的のコマンドが得られると思います。

佐田守弘(KS-00119)
10651 Re:休日以外の日数を数えるには 磯田 2001/04/03-00:27
記事番号10645へのコメント
祝祭日等は気にせずにとにかく土日をはずした日数の計算でしたら次のような計算式ではどうでしょうか。
やってみてください。
[A]は日時項目で開始日、[B]は日時項目で終了日、[C]は数値項目で項目計算式に
次のように入れます。

#日数([A],[B])-#INT(#日数([A],[B])/7)*2-#COND(#曜日([A])="日",1,#対応番号("日,土,金,木,水,火,月",#曜日([A]))=#MOD(#日数([A],[B]),7),2,#対応番号("日,土,金,木,水,火,月",#曜日([A]))-#MOD(#日数([A],[B]),7)=1,1,#曜日([A])="土",2,1,0)

考え方は数える期間の土日を数えるというものです。
一週間に土日は2日なので、日数を7で割りその答えに2を掛けます。
また、そのあまりの日数に関しては始まりの日時の曜日に応じて土日の日数を条件関数で減算します。
たぶんこれでうまくいくと思うのですが…。
10657 訂正です 磯田 2001/04/03-01:34
記事番号10651へのコメント
終わりの曜日も考慮する必要がありました。したがって

#日数([A],[B])-#INT(#日数([A],[B])/7)*2-#COND(#曜日([A])="日",1,#対応番号("日,土,金,木,水,火,月",#曜日([A]))=#MOD(#日数([A],[B]),7),2,#対応番号("日,土,金,木,水,火,月",#曜日([A]))-#MOD(#日数([A],[B]),7)=1,1,#曜日([A])="土",2,1,0)-#COND(#曜日([B])="土",1,#曜日([B])="日",2,1,0)

10658 再び訂正です 磯田 2001/04/03-02:38
記事番号10657へのコメント
何度もすみません。いくつか早とちりしていたみたいで、終わりの曜日を中心に考えるべきみたいです。
それと#日数()は経過日数で実際の労働日数はそれに1をたすひつようがあるのでした。
たとえば月曜から水曜まで働いたとすると労働日数は3日ですが#日数()では2日となってしまいます。
次の関数でやってみてください。

(#日数([A],[B])+1)-#INT((#日数([A],[B])+1)/7)*2-#COND(#MOD((#日数([A],[B])+1),7)=0,0,#曜日([B])="土",1,#対応番号("日,月,火,水,木,金,土",#曜日([B]))=#MOD((#日数([A],[B])+1),7),1,#対応番号("日,月,火,水,木,金,土",#曜日([B]))<#MOD((#日数([A],[B])+1),7),2,#対応番号("日,月,火,水,木,金,土",#曜日([B]))>#MOD((#日数([A],[B])+1),7),0)

もっと簡単に書けるのかもしれませんが。。。

戻る