[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シフト表』(NA)
月のシフト表があります。その中から、勤務者を勤務時間の早い順に並べ替えて、表示させたいです。 早…5:00〜14:00 A…6:00〜15:00 B…7:00〜16:00 C…8:00〜17:00 D…9:00〜18:00 遅…10:00〜19:00 休…休み みたいな勤務時間設定があります。
1 2 3 4 5 6 7 8 9 ……(日付) 佐藤 A B 休 D D D 遅 遅 B 鈴木 休 早 A A B B 休 A A 山田 遅 遅 D 休 A 遅 C D 休 阿部 C 休 C C 休 A 早 休 遅
のシフト表があります。
例えば、3日の勤務者表を出したいとすると
鈴木 6:00〜15:00 阿部 8:00〜17:00 山田 9:00〜18:00
の様に、表示させたいのですが、わかりません。教えてください。Excel2007です。
A B C D E F … 1 1 2 3 4 5 … 2 佐藤 A B 休 D D … 3 鈴木 休 早 A A B … 4 山田 遅 遅 D 休 A … 5 阿部 C 休 C C 休 … 6 : 10 3 日の勤務表 11 鈴木 6:00〜15:00 12 阿部 8:00〜17:00 13 山田 9:00〜18:00 14 : (B列) (C列) 20 早 5:00〜14:00 1 21 A 6:00〜15:00 2 22 B 7:00〜16:00 3 23 C 8:00〜17:00 4 24 D 9:00〜18:00 5 25 遅 10:00〜19:00 6 という表だとします。 仮にD11から14(最大人数が4人だから)と E11から14を作業列とします(列じゃないけど) 何日の勤務表か、をA10に数字でいれます。 日付は必ず1日がB1からはじまるものとします。 作業列のE11に =IF(OR(INDIRECT("R"&ROW(A2)&"C"&$A$10+1,0)="休",INDIRECT("R"&ROW(A2)&"C"&$A$10+1,0)=""),"",ROW(A2)) 同じく作業列のD11に =IF(E11="","",VLOOKUP(INDIRECT("R"&ROW(A2)&"C"&$A$10+1,0),$A$20:$C$25,3,0)) 両方とも14までフィルコピー A11に =IF(COUNT($D$11:$D$14)<ROW(A1),"",INDEX($A$1:$A$5,VLOOKUP(SMALL($D$11:$D$14,ROW(A1)),$D$11:$E$14,2,0))) B11に =IF(COUNT($E$11:$E$14)<ROW(B1),"",VLOOKUP(INDEX(INDIRECT("R1C"&$A$10+1&":R5C"&$A$10+1,0),VLOOKUP(SMALL($D$11:$D$14,ROW(A1)),$D$11:$E$14,2,0)),$A$20:$B$25,2,0)) 両方とも14までフィルコピー (すずめ)
ありがとうございました。すずめ様の、方法で早い時間ごとに表示されました。 大変恐縮なのですが、同日に同勤務の人が発生する場合、どの様にすればよいか、重ね てご教授頂けませんでしょうか。 例えば、佐藤A、鈴木A、みたいな場合、
佐藤 6:00〜15:00 佐藤 6:00〜15:00
となってしまい、鈴木の名前が反映されないのです。(NA)
何人ぐらいかぶりますかね? とりあえず10人までとして 作業列のD11の式を =IF(E11="","",VLOOKUP(INDIRECT("R"&ROW(A2)&"C"&$A$10+1,0),$A$20:$C$25,3,0))*10+ROW(A1) としてください。 10人以上かぶるなら後ろのほうにある「*10」を「*100」にしてください。 (すずめ)
すいません。色々やってみましたが、ダメそうなので、三度質問させて下さい。 作成したいものは、名前が入っている人が10人で予備であと3枠ほど確保したいです。 「休」の種類が2つ 「休」…公休 「−」…希望休
A B C D E F … 1 1 2 3 4 5 …(日付) 2 佐藤 A − 3 鈴木 B 早 4 山田 A B 5 阿部 休 − 6 後藤 休 休 7 遠藤 C C 8 松井 − C 9 石川 早 D 10 斉藤 早 休 11 浜崎 D 遅 12 (予備空欄) 13 (予備空欄) 14 (予備空欄) 15 : の様なシフト表で、 2日の勤務表なら 鈴木 5:00〜14:00 山田 7:00〜16:00 遠藤 8:00〜17:00 松井 8:00〜17:00 石川 9:00〜18:00 浜崎 10:00〜19:00 の様に表示させたいです。何度もすいません。お願い致します。(NA)
どう式を直してダメだったか書いていただけると、解説のしようもあるのですが・・・ とりあえず想像で! A B C D E 1 1 2 3 4 2 佐藤 A − 3 鈴木 B 早 4 山田 A B 5 阿部 休 − 6 後藤 休 休 7 遠藤 C C 8 松井 − C 9 石川 早 D 10 斉藤 早 休 11 浜崎 D 遅 12 (予備空欄) 13 (予備空欄) 14 (予備空欄) 15 (予備空欄) 16 (予備空欄) : 20 2 日の勤務表 D列 E列 21 鈴木 5:00〜14:00 22 山田 7:00〜16:00 102 3 23 遠藤 8:00〜17:00 303 4 24 松井 8:00〜17:00 25 石川 9:00〜18:00 26 浜崎 10:00〜19:00 406 7 27 407 8 28 508 9 29 30 610 11 31 : C列 40 早 5:00〜14:00 1 41 A 6:00〜15:00 2 42 B 7:00〜16:00 3 43 C 8:00〜17:00 4 44 D 9:00〜18:00 5 45 遅 10:00〜19:00 6 最大人数をとりあえず15人としました。Aの16行まで人名を入れられます。 作業列のE21に =IF(OR(INDIRECT("R"&ROW(A2)&"C"&$A$20+1,0)="休",INDIRECT("R"&ROW(A2)&"C"&$A$20+1,0)="−",INDIRECT("R"&ROW(A2)&"C"&$A$20+1,0)=""),"",ROW(A2)) 同じく作業列のD21に =IF(E21="","",VLOOKUP(INDIRECT("R"&ROW(A2)&"C"&$A$20+1,0),$A$40:$C$45,3,0)*100+ROW(A1)) 両方とも35行目までフィルコピー A21に =IF(COUNT($D$21:$D$35)<ROW(A1),"",INDEX($A$1:$A$16,VLOOKUP(SMALL($D$21:$D$35,ROW(A1)),$D$21:$E$35,2,0))) B21に =IF(COUNT($E$21:$E$35)<ROW(A1),"",VLOOKUP(INDEX(INDIRECT("R1C"&$A$20+1&":R16C"&$A$20+1,0),VLOOKUP(SMALL($D$21:$D$35,ROW(A1)),$D$21:$E$35,2,0)),$A$40:$B$45,2,0)) 両方とも35までフィルコピー 修正のポイントです。 1:勤務表($A$20:$B$35)の位置が違う場合 ・E、D、Bの式の日付の位置(現在$A$20)の変更 ・Dの式のE21の変更 ・A、Bの式の作業列($E$21:$E$35、$D$21:$D$35、$D$21:$E$35)の変更 2:時間帯一覧表($A$40:$C$45)の位置が違う場合 ・Dの式の$A$40:$C$45の変更 ・Bの式の$A$40:$B$45の変更(上と列数が違うのに注意) 3:人数が増えた場合 ・作業列の範囲を広げる(増えた人数分下にフィルコピー) ・Aの式の$A$1:$A$16を人数ぶん範囲を広げる ・Bの式のR16Cの16を行数と一致させる(18行目まで名前を入れるならR18Cに) ・AとBの式の作業列の範囲($E$21:$E$35、$D$21:$D$35、$D$21:$E$35)を広げる ・AとBの式の範囲を広げる(増えた人数分下にフィルコピー) 位置がわからず、こっちが仮定していれたので、変更しそうなポイントはこんなところでしょうか? あとは式の意味と構成を理解していただけるとよいかと思います。 (すずめ)
作ってみたので載せさせて下さい。
AH列を作業列にしてみました。 [A] [B] [C] [D] [E] [F] ・・・ [AH] [1] 1 2 3 4 5 作業列 [2] 佐藤 A − [3] 鈴木 B 早 1.03 [4] 山田 A B 3.04 [5] 阿部 休 − [6] 後藤 休 休 [7] 遠藤 C C 4.07 [8] 松井 − C 4.08 [9] 石川 早 D 5.09 [10] 斉藤 早 休 [11] 浜崎 D 遅 6.11 [12] (予備空欄) [13] (予備空欄) [14] (予備空欄) : [21] 2 日 [22] 鈴木 5:00〜14:00 [23] 山田 7:00〜16:00 [24] 遠藤 8:00〜17:00 [25] 松井 8:00〜17:00 [26] 石川 9:00〜18:00 [27] 浜崎 10:00〜19:00 : [34] : [41] 区分 時間 [42] 早 5:00〜14:00 [43] A 6:00〜15:00 [44] B 7:00〜16:00 [45] C 8:00〜17:00 [46] D 9:00〜18:00 [47] 遅 10:00〜19:00 AH2=IF(COUNTIF($A$42:$A$47,HLOOKUP($A$21,$B$1:AF2,ROW(AH2),FALSE)),MATCH(HLOOKUP($A$21,$B$1:AF2,ROW(AH2),FALSE),$A$42:$A$47,0)+ROW(AH2)/100,"") AH2 → AH14までフィルドラッグ A22=IF(COUNT($AH$2:$AH$14)<ROW(A1),"",INDEX($A$2:$A$14,MATCH(SMALL($AH$2:$AH$14,ROW(A1)),$AH$2:$AH$14,0))) B22=IF(A22="","",INDEX($B$42:$B$47,INT(SMALL($AH$2:$AH$14,ROW(A1))))) A22:B22 → A34:B34までフィルドラッグ
(HANA)
AH2用の式は =IF(COUNTIF($A$42:$A$47,INDEX(B2:AF2,$A$21)),MATCH(INDEX(B2:AF2,$A$21),$A$42:$A$47,0)+ROW(AH2)/100,"") で良かったですね。。。
(HANA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.