[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『勤務表』(ゆっくん)
セルA1からAEまで、日付が入っています。 その下のA2には数字と漢字が入るのですが、 月日が変わると自動でずれて変わるようにしたいのですが何かいい方法がありませんか。 よろしくお願いします。 WindowsXP Excel2003
ABCDE 〜 AAABACADAE 1 1 2 3 4 5 6 7 8 9 10 〜 31日 2 3 3 3 3 3 休休 2 2 2 2 2 休 1 1 1 1 1 休休〜 これの繰り返し 3 4 5月
>月日が変わると自動でずれて変わるようにしたいのですが何かいい方法がありませんか。 とありますが、どんな結果を求めているのでしょう。 >月日が変わると とは、月が変わるという意味でしょうか? 現在の月はどこかに記述していますか? (SHIOJII)
もう少し「3 3 3 3 3 休休 2 2 2 2 2 休 1 1 1 1 1 休休」 この部分の法則を教えて下さい。 >自動でずれて変わるようにしたい と言う事は、月が変わると変わるのですよね? 何がきっかけで何の数字が入るのでしょうか?
数字が5つ続いたら休みが二つで、数字はカウントダウンしていく と言うのは分かりますが、1の次は0ですか?3ですか?それとも違う数字?
5/1が「3」と言うのは何か理由が有ったりしますか? (HANA)
毎年1月1日にリセットされて良いなら (しかも「2」から始まります) A3=IF(WEEKDAY(A2,2)>5,"休",3-MOD(WEEKNUM(A2),3)) として、右にコピー。 (エラー処理してません)
★WEEKNUM関数は メニュー・ツール→アドイン→分析ツール にチェックを入れてご利用下さい。
(HANA)
衝突しましたがそのまま >5/1が「3」出なくてもいいです。5/1(例)として記入しています。 ということは、 1日は必ず3からというわけではなく、 先月の続きということですか? それとも、何でもいいの????「3」「2」「1」「休」が1個でも2個でも? (SHIOJII)
こっちの方が良さそうなので、式を訂正します。 A3=IF(WEEKDAY(A2,2)>5,"休",3-MOD(INT(A2/7),3)) として、右にコピー。 (エラー処理してません)
これだと、分析ツールにチェックを入れなくても良いし 毎年1月1日にリセットされずに続く・・・・・予定です。 (ちなみに、5/1は「2」から始まります。)
(HANA) 追記・訂正しました。
3が5日間の後 休 が 2日
2が5日間の後 休 が 1日
1が5日間の後 休 が 2日
と、決まっています。
それで、先ほど教えていただいた式を入れたのですが、2が5日間の後「休」が2つ続いてしまうので、1つにして更に、日にちのない所は空白にしたいのですがどうすれば宜しいでしょうか?(追記 日付の設定は、「西暦」と「月」で日にちを替わるようにしています。)
大変御迷惑をおかけしますがよろしくお願いします。
(ゆっくん)
おっと、2の後は「休」1つなんですね。 (見落としてました・・・・。)
出来るかどうか分かりませんが、とりあえず確認させて下さい。
毎年9/1が基準ですか? 「日にちのない所」と言うのは、「月を外れたら」ですよね。 1行目はIF関数か何かで空欄表示になっていますか?
(HANA)
再確認。
>9/1から始まって 2006/9/1〜2007/8/31 の間で続いて、次の年度(?) 2007/9/1〜2008/8/31 はまた新しく「333・・・」が始まる と言う事ですよね?
ちなみに >(追記 日付の設定は、「西暦」と「月」で日にちを替わるようにしています。) 月はA4と言うことですが、西暦は何処かに入力用セルが有りますか?
(HANA)
本当にもう、せっかちさんでごめんなさいね。
今度こそ A2=IF(A1="","",INDEX({3,3,3,3,3,"休","休",2,2,2,2,2,"休",1,1,1,1,1,"休","休"}, (A1-DATE(IF(MONTH(A1)<9,YEAR(A1)-1,YEAR(A1)),9,1))- (20*INT((A1-DATE(IF(MONTH(A1)<9,YEAR(A1)-1,YEAR(A1)),9,1))/20))+1))
突貫なので式に無駄が有りそうですが・・・・。 上手く行くことを願っています。(笑)
(HANA)
A BCDE 〜 AAABACAD AE 12006年 29月 1 2 3 4 5 6 7 8 9 10 〜 30 3 3 3 3 3 3 休休 2 2 2 2 2 休 1 1 1 1 1 休休3 3 3 3 3 休休 2 2 2 410月 1 2 3 4 5 6 7 8 9 10 〜 30 31 5 2 2 休 1 1 1 1 1 休休3 3 3 3 3 休休2 2 2 2 2 休 1 1 1 1 1 休 休 3
@セルA1に西暦を入力規則で2006年から2020年まで設定
AセルA2に月を1月から12月まで入力規則で設定
B2006年9/1のセルB3=3を基本にします。
CセルAD3=2が3日間で終わっているので、4日目の2を10/1から続くようにします。
D西暦か月を変更すると2006年9/1を基本で変わるように出来たらいいのですが。
E日付は、書式設定と関数を使用して西暦か月を変更すると変わります。
何回もお手数をおかけしますがよろしくお願いします。
(ゆっくん)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF 1 2006 2 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 3 休 2 2 2 2 2 2 休 1 1 1 1 1 休 休 3 3 3 3 3 休 休 2 2 2 2 2 2 休 1 1 4 休 3 3 3 3 3 休 休 2 2 2 2 2 休 休 1 1 1 1 1 休 休 3 3 3 3 3 休 休 2 2 5 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 B3:=IF(AND(WEEKDAY(B2,2)=6,A3=2),3-MOD(WEEKNUM(B2),3),IF(WEEKDAY(B2,2)>5,"休",3-MOD(WEEKNUM(B2),3)))
MOD(WEEKNUM(B2),3)をMOD(WEEKNUM(B2+7),3) もしくは MOD(WEEKNUM(B2+14),3) に すれば スタートナンバーが変わります。 (8マン) 参考 B4:=IF(WEEKDAY(B2,2)>5,"休",3-MOD(WEEKNUM(B2),3)) AD2に日付け表示の無い場合 ""の時 AD3 =IF(AD2="","",IF(AND(WEEKDAY(AD2,2)=6,AC3=2),3-MOD(WEEKNUM(AD2),3),IF(WEEKDAY(AD2,2)>5,"休",3-MOD(WEEKNUM(AD2),3))))
皆さん、 失礼しま〜す。。。
こんな方法もあります。。
A B C D 1 2006 2 9 9/1 9/2 9/3 ・・・ 2 3 3 3 ・・・
A2セルを 10 にするとB2から右が、 10月のカレンダーに変更される という事なんでしょうか?。。。
そして、 10月になったら B3セルから >2を10/1から続くようにします。
でしたら。。。
B3セルへ =IF(SUM(INDEX(((MOD((B2-DATE($A$1,9,1)+20),20)+1)={6,7,13,19,20})*1,))=1,"休", IF((MOD((B2-DATE($A$1,9,1)+20),20)+1)<6,3,IF((MOD((B2-DATE($A$1,9,1)+20),20)+1) <13,2,1)))
右にコピーして下さい。
★A1の年が変っても、大丈夫だと思います。 (その年の9/1から、始まります)
★カレンダーの月末が、31日に満たない日のセルの処理は どの様にしているか分かりませんので、エラー処理はしていません。 そのまんまの式なんですが〜。。。
カン違いならゴメンナサイ!! 。。。(Ms.Rin)〜♪♪
↑のレスで
>★A1の年が変っても、大丈夫だと思います。 > (その年の9/1から、始まります)
と書きましたけれど、カン違いしていたみたいです。
A1セルの年が、2006→2007に変わっても 2006/12/31から引き続き、3休2休1休等を入れていくんですね。 例えば、2006/9/1〜2007/8/31の期間で。
その場合の式を訂正しました。 式も少し、短くしてみましたので こちらを使ってみてください。。。
B3: =LOOKUP((MOD(((B2)-DATE($A$1-($A$2<9),9,1)+20),20)+1),{0,6,8,13,14,19},{3,"休",2,"休",1,"休"})
右にコピーです。
★カレンダーの月末が、31日に満たない日のセルの処理は どの様にしているか分かりませんので、エラー処理はしていません。
。。。(Ms.Rin)でした〜♪♪
今、12か月分同じように作っていますが、
@西暦と月のどちらを変更しても勤務が変わるようにしたいと思っています。
A29日(うるう年)は、=IF(MONTH(AD2+1)>$A$2,"",AD2+1)
30日は、=IF(AE2="","",IF(MONTH(AE2+1)>A2,"",AE2+1))
31日は、=IF(AF2="","",IF(MONTH(AF2+1)>A2,"",AF2+1)) の式を入れてます。
B1/1からいま作っています。(12か月分作っているため)
A B C D E F G H I J k 〜
1 2006年
2 1月 1 2 3 4 5 6 7 8 9 〜
3 日 月 火 水 木 金 土 日 月 〜
4 A 休 1 1 1 1 1 休 休 3 〜
5 B 1 休 休 3 3 3 3 3 休 〜
6 C 3 3 3 休 休 2 2 2 2 〜
7 D 2 2 2 2 2 休 1 1 1 〜
といった感じで、A・B・C・Dと今度は、4つの組を今は作っています。
もし、宜しければ変わってばかりで申し訳ないのですが教えていただけたら
と思っています。よろしくお願いします。
(ゆっくん)
私の式が使えたのなら、式の一行目 >INDEX({3,3,3,3,3,"休","休",2,2,2,2,2,"休",1,1,1,1,1,"休","休"}, この{ }の中を表示したいパターンに変更して下さい。
4パターンも有るようなので、何処かにリストを作っておいて 参照した方が良いかもしれませんね。 ちなみに、最初のサンプルを [A] [4] パターン1 [5] 3 [6] 3 [7] 3 [8] 3 [9] 3 [10] 休 [11] 休 [12] 2 [13] 2 [14] 2 [15] 2 [16] 2 [17] 休 [18] 1 [19] 1 [20] 1 [21] 1 [22] 1 [23] 休 [24] 休 このようにリスト配置した場合、該当個所は INDEX($A$5:$A$24, と言う短い式になります。 (横方向に伸ばした方が見やすかったらそのようにして セル番地を変更して下さい。絶対参照にするのをお忘れなく)
たとえば、「20日で一回り」が変わるなら 現在の「20」と言う数字は、式の三行目 >(20*INT((A1-DATE(IF(MONTH(A1)<9,YEAR(A1)-1,YEAR(A1)),9,1))/20))+1)) ~~ ~~ この2カ所に反映されているのでそこを変更してみて下さい。
9月始まりで無くなった場合は、二行目と三行目にある ^の部分の「9」4カ所を開始月に変更です。 日にちが変わった場合は二行目と三行目に共通して現れる ~の部分の「1」2カ所を変更すれば良いと思います。 >DATE(IF(MONTH(A1)<9,YEAR(A1)-1,YEAR(A1)),9,1))←二行目・三行目共通 ^ ^ ~ 元々長い式ですが、変更箇所をもう一度纏めておきます。 A2=IF(A1="","",INDEX({3,3,3,3,3,"休","休",2,2,2,2,2,"休",1,1,1,1,1,"休","休"}, −−−−−−−−−−−−−−−−−−−−−−−−−−−− (A1-DATE(IF(MONTH(A1)<9,YEAR(A1)-1,YEAR(A1)),9,1))- ^ ^ ~ (20*INT((A1-DATE(IF(MONTH(A1)<9,YEAR(A1)-1,YEAR(A1)),9,1))/20))+1)) == ^ ^ ~ == パターンが変更した場合 →「−」1カ所 1回りの数が変更した場合→「==」2カ所 開始月が変更の場合 →「^^」4カ所 (但し1月以外です) 開始日が変更の場合 →「~~」2カ所
(HANA)
Ms.Rinで〜す。。。
>宜しければ変わってばかりで申し訳ないのですが
アップされた表を見ますと、
>1/1からいま作っています
1/1〜12/31の期間に変更されたようですね?
3 3 3 3 3 休休 2 2 2 2 2 休 1 1 1 1 1 休休 このサイクルは、変えずに ABCDの人がいて それぞれの 1/1 の始まりが違うという事なんでしょうか?
★その場合の方法です。 (1)2行目のカレンダーの日付は入っている様ですけれど。 一応書いておきます。
こんな表です。
A B C D E 1 2006 2 1 1/1 1/2 1/3 3 日 月 火 4 A 休 1 1 5 B 1 休 休 6 C 3 3 3 7 D 2 2 2 8
B2: =IF(MONTH(DATE($A$1,$A$2,COLUMN(A1)))<>$A$2,"",DATE($A$1,$A$2,COLUMN(A1))) 右にコピーします。
(2)シフトを入れます。
B4: =IF(B2<>"",LOOKUP((MOD((($B$2+12)-DATE($A$1,1,1)+20),20)+1),{0,6,8,13,14,19},{3,"休",2,"休",1,"休"}),"") ↑ (★ +12 ここがポイントです.) この式を右にコピーします。
★ポイントの +12 を説明します。
0・1・2・3・4・5・ 6・ 7・8・9・10・11・12・13・14・15・16・17・18・19 3・3・3・3・3・休・休・2・2・2 ・2 ・2・休 ・1・ 1・ 1・ 1・ 1・ 休・休
こんな表をどこかのセル範囲に、作っておくと良く分かると思いますよ〜。。 下段が、20日のサイクルで。 上段に、0〜19 を入れます。
式の中の MOD(((B2+12)-DATE から +12 を取ると +0 と同じですから MOD(((B2)-DATE これは。 1/1は、上段のゼロの下 3 (サイクルの最初の3)から 始まりますという事です。
A4セルの Aさん の場合は、休11 の 休 から始まりますので 上の表を見るとこの時の 休 は、12の下に 休 があるのが分かると思います。 ですから、B2+12 にします。
こんな感じで、BさんCさんDさん も同じようにしてみて下さい。 AさんのB4の式を 一旦、B7までコピーしてから +12 の部分を表を見て変えて +(プラス)してみて下さい。
私が書いた表の様に、シフトが出来ると思います。
説明がヘタで、ゴメンナサイ!! わからない所があれば、 再レス、くださいませ〜。。。。
。。。(Ms.Rin)でした〜♪♪(^_-)V
B1:=IF(MOD(A$1+ROW(),6)>=4,"A",MOD(INT(A$1+ROW()/6),3)+1) 下へ 数字、rowをcolumnに 変更すれば パターン変更も (YYY) 参考で
もうひとつだけ教えていただけますか。
=IF(B2<>"",LOOKUP((MOD((($B$2+12)-DATE($A$1,1,1)+20),20)+1),{0,6,8,13,14,19},
{3,"休",2,"休",1,"休"}),"")
を、使わしていただいて要るのですがセルA1の2006年(入力規則で設定)を2007年
とか2009年に変更してもシフトが変わらないのですが、曜日と同じように常に年・月
を変えたら変わるようにするにはどうすればいいのか教えてください。
(2008年に変えた時だけ2/29があるため、シフトが変わるみたいです。)
こんにちは〜♪ Rinで〜す。。。
最初に、
=IF(B2<>"",LOOKUP((MOD((($B$2+12)-DATE($A$1,1,1)+20),20)+1),{0,6,8,13,14,19}, {3,"休",2,"休",1,"休"}),"")
の式は、今気が付きましたけれど
MOD((($B$2+12) の$B$2 は、何故か絶対参照になっていましたね。 B2 が、正しいです。
たぶん(ゆっくん)さんは、気が付いて B2 に直されたと思いますが。
>セルA1の2006年(入力規則で設定)を2007年 >とか2009年に変更してもシフトが変わらないのですが、 >曜日と同じように常に年・月 を変えたら変わるようにするには >どうすればいいのか教えてください。
2006/1/1〜2006/12/31 の様に、1年ひと区切りではなくて 2006/1/1をスタートとして、2007年 2008年と20日間のシフトの サイクルが、ずっと継続されるのでしょうか?
もしそうであれば、 Aさんの場合の式は
B4 : =IF(B2<>"",LOOKUP((MOD(((B2+12)-DATE(2006,1,1)+20),20)+1),{0,6,8,13,14,19},{3,"休",2,"休",1,"休"}),"")
右にコピーしてください。
これで、2006/1/1から、ず〜っと。シフトが続きます。
(Ms.Rin)〜♪♪
SHIOJIIさん・HANAさん・Ms.Rinさん・本当にありがとうございました。
今後は、御迷惑をおかけしないように勉強します。
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF 1 2006 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2 5 休 休 3 3 3 3 3 休 休 2 2 2 2 2 休 1 1 1 1 1 休 休 3 3 3 3 3 休 休 2 2 3 休 3 3 3 3 3 休 休 2 2 2 2 2 休 1 1 1 1 1 休 休 3 3 3 3 3 休 休 2 2 2 4 3 3 3 3 3 休 休 2 2 2 2 2 休 1 1 1 1 1 休 休 3 3 3 3 3 休 休 2 2 2 2 B1=DATE($A$1,$A$2,1) C1=B1+1 AC1までフィールコピー AD1==IF(MONTH(AA1+3)=$A$2,AC1+1,"") AF1まで B2=IF(B1<>"",LOOKUP((MOD((B1),20)+1),{0,6,8,13,14,19},{3,"休",2,"休",1,"休"}),"") B3=IF(B1<>"",LOOKUP((MOD((B1+1),20)+1),{0,6,8,13,14,19},{3,"休",2,"休",1,"休"}),"") B4=IF(B1<>"",LOOKUP((MOD((B1+2),20)+1),{0,6,8,13,14,19},{3,"休",2,"休",1,"休"}),"") A1 A2書式 標準もしくは数値 B1から右 書式 ユーザ定義 d 2行目 (MOD((B1),20)+1) のB1 を+1したものが 3行目 +@によって ずらすことができます。 +0〜+19の範囲でずらすことができます。 -DATE(2006,1,1)+20)は必要ないですね。 (YYY)
=MID("33333休休22222休11111休休",MOD(DATE($A$2,$B$2,D2),20)+1,1)
("33333休休22222休11111休休", → 並び替えで始まり位置変更が出来ますよ. ("11休休33333休休22222休111", → 並び替え例
(参考)
{3,"休",2,"休",1,"休"} 文字を変更してみたら で試したらわかるよ
A B C D E F G H I J K L M N 2007年 4月 1
2
3
4 1 2 3 4 5 6 7 ・・・・・・(日付)
5 日 月 火 水 木 金 土 ・・・・・・(曜日)
6
7 勤 務 3 3 3 ○ 2 2 2 ○ 1 1 1 ・・・・・(勤務)
8
9
10
11
こんにちは。今困っている事があります。(曜日)の所(D5)には「=DATE($F2,$J$2),D4) (E5)の所には「=DATE ($F2,$J$2),E4)」・・・・と言うように月が変われば自動で日にちと曜日が変わるようにしてあります。そこで質問なんですが「勤務」の所で「333○222○111○・・・・・」と言うように永遠と、このサイクルを続くためにするには(月が変わっても)どのようにすればいいでしょうか?分かれば教えてください(マー吉より)
=(MOD(D4+1,4)<>0)*(3-MOD(INT(D4/4),3)) (HANA3) =MID("333○222○111○",MOD(D4,12)+1,1)
=(MOD(D4+1,4)<>0)*(MOD(INT(D4/4),3)+1) その方法はすでに書かれていますよ.
=IF(MOD(D4+1,4)=0,"a",3-MOD(INT(D4/4),3)&"") (HANA3)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.