グッドデザイン賞を受賞したウォーターサーバー >>

似たような質問があると思いますが、なかなか合ったものが無かったので質問させていただきます。

1か月の活動内容が記載されたカレンダーがありまして、A列に日付が1か月分入っています。
B列に当番の名前を入れたいのですが、毎日では無くて飛び飛びになっています。
具体的には、火・木・土・日だけしか当番の名前は入りません。
月次の予定表を兼ねているので、火・木・土・日だけの表示にする事はできません。
当番は10人で、1年間同じ順番で回ってきます。
大した数ではないので今まで直接打込んでいましたが
何か自動でできるような便利な方法がありましたら教えてください。

もう一つ、C列には、管理者が入ります。
管理者は火・木担当と、土・日担当がいます。
管理者は、曜日固定でいつも同じ人が入ります
こちらも何か便利な方法があれば教えてください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

A1,B1,C1,D1,E1セルに、それぞれ、日付、当番の名前、管理者の名前、当番選択日、管理者選択日、というタイトルを記入しておきます。



A2セルから下に日付があるとして、D2セルに、
=IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=3,WEEKDAY(A2)=5,WEEKDAY(A2)=7),1,"")
と入力して下にドラッグコピーします。これで、火・木・土・日の行は1、他はブランクになります。

次に、D1セルを選んで、昇順に並べ替えます。
これで、選択日の行が最初に並びます。

B2セルから下に、10人の当番の名前を、順番に記入します。

次に、B2からB11までの10人分のセルを選んで、D2セルに1が記入されているところまで、下にドラッグコピーします。
これで、全ての火・木・土・日の行に当番10人の名前が自動的に順番に記入されます。

C2セルから下に、4人分の管理者の名前を、順番に記入します。

次に、C2からC5までの4人分のセルを選んで、D2セルに1が記入されているところまで、下にドラッグコピーします。
これで、全ての火・木・土・日の行に管理者の名前が自動的に順番に記入されます。

あとは、A1セルを選んで、昇順に並べ替えて、日付順の表に戻します。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
非常に分かりやすく簡単なので気に入りました。

お礼日時:2013/04/09 09:10

おっと失礼


式中の閉じ括弧が掛けていました、

改定させて下さい

改定前は
勤務者は
=choose(WEEKUDAY(TODAY(),2,"","A田太一","","B垣一郎","","C根安弘","大D桃子")

管理者は
=choose(WEEKUDAY(TODAY(),2,"","Zさん","","Zさん","","Hさん","Hさん")

正しくは
勤務者は
=choose(WEEKUDAY(TODAY(),2),"","A田太一","","B垣一郎","","C根安弘","大D桃子")

管理者は
=choose(WEEKUDAY(TODAY(),2),"","Zさん","","Zさん","","Hさん","Hさん")

WEEKDAYの閉め括弧が抜けてました。
失礼しました。

この回答への補足

回答ありがとうございます。
入力した数式が正しくない、と出るのですが
どうしてでしょうか?

補足日時:2013/04/09 08:37
    • good
    • 0
この回答へのお礼

私の間違いでした。
回答ありがとうございます。

お礼日時:2013/04/09 09:07

こんばんは!


一案です。
少々泥臭い方法になりますが、
↓の画像のようにSheet2に表を作成しておきます。
質問内容では1月に2回のローテーションはないみたいですので、
とりあえずSheet2のC列に2ローテーション分の表を作成。
D2・D3セルには「管理者」の氏名を!
A列はSheet1に表示するための表で10人分だけ表示!

尚、付きが変わるときには前月の最後の担当者の次からの表示が必要だと思いますので、
月替わりにはSheet1の最終担当者と目視で確認し、A2~A11セルに前月担当者の次の担当者から10人を
B列の表を利用してA2セル以降にコピー&ペーストするようにします。

尚、Sheet1はシリアル値の方が何かと便利だと思いますので、余計なお世話かもしれませんが
カレンダーの作成から説明します。

Sheet1のA1セルに西暦年・C2セルに表示したい月を入力します。
Sheet1のA4セル(セルの表示形式はユーザー定義から d(aaa) としておきます)に
=IF(MONTH(DATE(A$1,C$1,ROW(A1)))=C$1,DATE(A$1,C$1,ROW(A1)),"")

B4セルに
=IF(A4="","",IF(MOD(WEEKDAY(A4),2)=1,INDEX(Sheet2!A$2:A$11,IF(COUNTIF(B$3:B3,"*?")=10,10,MOD(COUNTIF(B$3:B3,"*?"),10))),""))

C4セルに
=IF(B4="","",IF(WEEKDAY(A4,2)>5,Sheet2!D$2,Sheet2!D$3))

最後にA4~C4セルを範囲指定 → C4セルのフィルハンドルで下へ(月末の34行目まで)オートフィルでコピーすると
画像のような感じになります。

以上、長々と書きましたが参考になりますかね?m(_ _)m
「エクセルの当番表を作りたいのですが」の回答画像3
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2013/04/09 09:05

仮に「A田太一」「B垣一郎」「C根安弘」「大D桃子」の四人がこの順番で勤務に就いているとします。



勤務者は
=choose(WEEKUDAY(TODAY(),2,"","A田太一","","B垣一郎","","C根安弘","大D桃子")

管理者は
=choose(WEEKUDAY(TODAY(),2,"","Zさん","","Zさん","","Hさん","Hさん")

これで如何でしょうか?
簡単明瞭ですね。

名前は実勢に併せて変更して下さい。
TODAY()の部分は 表中の日付を示している場所を指し示し直して下さい。


お役に立てていたならば幸いです。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル 当番表の作り方 エクセルで土日祝日を除いた、平日のみの当番表を作りたいです。 カレンダーま

エクセル 当番表の作り方

エクセルで土日祝日を除いた、平日のみの当番表を作りたいです。

カレンダーまでは作成して、土日祝日の削除も行いましたが、当番表のローテーションを自動で入力する方法で詰まりました。

添付した画像のような感じで作成したいです。

また、次の月に変えた時に前の月の続きで表示されるようにしたいです。

わかりにくくてすみませんが、よろしくお願いしますm(_ _)m

Aベストアンサー

No7です。
日付の設定で誤りがありました。下記が正しいです。(添付資料参照)
B2に1、C2に2と入力し、2つのセルを同時に選択します。そして、そのまま右へオートフィルでコピーします。
上記のようにしてください。

Qエクセルで作成したカレンダーに「当番の名前」を自動的に入力する方法をお

エクセルで作成したカレンダーに「当番の名前」を自動的に入力する方法をおしえてください。


毎月エクセルで朝礼当番表を作っています。
土、日、祝がお休みです。
たとえば、1日に最初の人の名前を入力すると休みの日はぬかして、
順番に当番が入力されるという関数があれば教えてください。

1行目に「日にち」
2行目に「曜日」
3行目に「当番者名」

と簡単な表です。

リストからコピペしたら間違えてしまいました。

オートフィルで入力しようかと思ったのですが、休みの日を抜かすのが面倒で。


よろしくお願いします。

Aベストアンサー

>6行目(B6セル)に =IF(B6=0,MOD($B2-2+DAY(B3)-SUM($B5:B5),$B1)+1,0)
式を分解してみるとわかりやすいです。
更に
7行目に作業列 =$B2-2+DAY(B3)
    日にちごとに 日にち事に連続した番号になります。
8行目に作業列 =MOD($B2-2+DAY(B3),$B1)
    その番号を 人数で割ったあまりがでます。
9行目に作業列 =SUM($B5:B5)
    休みの数の合計がでます。

と入れて右へコピィしてみてください。
式のセルを指定する $B2 とか$マークが付く場合と付かない場合がありますよね。
絶対参照と呼びますが、意味は右へコピィしてもセルの位置を変動させないということです。
例えば
9行目の=SUM($B5:B5)の式を右へコピィした場合
=SUM($B5:B5)
=SUM($B5:C5)
=SUM($B5:D5)
・・・
と合計する範囲が広くなっていくように設定してあります。

別件ですが
カレンダーの日付をコピィの作業をしなくても良いように関数をいれておくことも出来ます。
   A     B   C   D・・・
1 人数    5   年  2010
2 最初の人  1   月   1
3 日付    10/1 10/2
4 曜日    金曜  土曜・・・
とD1セルに 年 の数値 D2セルに 月 を数値で入れます。
日付のB2セルには =DATE($D1,$D2,COLUMN(A1)) と入れて右へコピィしておきます
ここも 年と月を決める D1とD2のセルを指定するときは右へコピィしても変動しないように
$マークをつけておきます。
COLUMN(A1)はA1セルの列の番号です。右へコピィした場合に
COLUMN(B1)
COLUMN(C1) と変動する様に $マークは付けません。
*COLUMN(A1)は COLUMN(A2)でもACOLUMN(3)でもかまいません。
曜日のB3セルには =B2 と入れます。書式=>セル で表示形式のタブ ユーザ定義 で aaa
と入れると その日の表示が曜日になります。
B3セルも右へコピィします。
毎月、月の部分を変更するだけで その月のカレンダーになります。
表示形式については
http://www.excel.studio-kazu.jp/lib/e3g/e3g.html
などを参考にしてください。

>6行目(B6セル)に =IF(B6=0,MOD($B2-2+DAY(B3)-SUM($B5:B5),$B1)+1,0)
式を分解してみるとわかりやすいです。
更に
7行目に作業列 =$B2-2+DAY(B3)
    日にちごとに 日にち事に連続した番号になります。
8行目に作業列 =MOD($B2-2+DAY(B3),$B1)
    その番号を 人数で割ったあまりがでます。
9行目に作業列 =SUM($B5:B5)
    休みの数の合計がでます。

と入れて右へコピィしてみてください。
式のセルを指定する $B2 とか$マークが付く場合と付かない場合がありますよね。
絶対参照と呼び...続きを読む

Qexcel 当番表を作る

excelで当番表を作っています。
カレンダーの中に毎日「お昼当番」と「朝礼当番」を入れています。
「お昼当番」と「朝礼当番」のメンバーは若干違います。


7月

 2日 3日 4日 5日 6日
 A  B  C  D  E
 C  B  A  C  B

 9日 10日 11日 12日 13日
 F  G  A  B  C
 A  C  B  A  C

・・・・

このとき、3日や13日のように同じ人が当番が重なることがありますが
これは避けたいと思っています。

いつもこのカレンダーの作成を行う際、
コピペを間違って誰かが途中抜けてしまったり、
同じ人が重なってしまうことを見落とすことがあります。
このようなカレンダーの作成を自動で行う方法はあるでしょうか?
難しいと思いますが、ご助力お願い致します。

Aベストアンサー

原則として
「お昼当番」がA→B→C→D→E→F→G
「朝礼当番」がC→B→A
という順番で繰り返すという感じでしょうか。ですが、3日や13日のように重複する日が出てしまうので、これを避けたいということですよね。
これを「自動的に行う」ということであれば、3日のような例外処理もあるので、VBAでプログラムを作成するという必要があるでしょう。こちらについては、諸条件を明確にしていく必要がありますので省略します。

ですので、もう少し手順を簡単にするという方向性でしょうか。
現在は、コピペで名前を入力しているみたいですが、もしかしたら「入力規則」を使って、選択リストから名前を選択入力するようにしたほうが便利かもしれません。
お昼当番などの欄を選択して[データ]→[入力規則]コマンドを利用し、[入力値の種類]を「リスト」にして、[元の値]欄に「A,B,C,…」のように名前をカンマで区切って入力します。するとセルを選択した際に、[▼]ボタンが表示され、このボタンから人名を選択入力できるようになります。これは、人名がどれだけ規則的に繰り返されるのかによって、コピペとどっちのほうが簡単なのか、変わってくるでしょう。

そして、No.1の方の回答にあるように、COUNTIFで回数を表示するようにしておくといいと思います。

もう1つの「重複チェック」に関しては、新たな行を設ける以外に、「条件付き書式」を利用する方法があると思います。
「2日」のセルがA1セルと仮定すると、下欄のCから始まる「朝礼当番」は、A3~D3に相当しますね。このセル範囲を選択しておいて、[書式]→[条件付き書式]コマンドを実行します。
ダイアログが表示されたら、[セルの値が」「次の値に等しい」「=A2」と設定します。最後の「=A2」は、ワークシート上の「A2」セルをクリックすると「=$A$2」となりますので、[F4]キーを3回押して「=A2」とします。
その後、[書式]ボタンをクリックして、表示されたダイアログの[パターン]パネルで好みのセルの色を設定してください。
[OK]ボタンをクリックしていってダイアログを閉じると、上の「お昼当番」と同じ人名の場合は、「朝礼当番」のセルに色が付いて判断できるようになります。このA3~D3をコピーして、9日からの週などの行にも[形式を選択して貼り付け]コマンドで「書式」だけを貼り付ければ、条件付き書式の設定をコピーすることができます。

どんな方法がやりやすいか、いろいろ試してみてください。

原則として
「お昼当番」がA→B→C→D→E→F→G
「朝礼当番」がC→B→A
という順番で繰り返すという感じでしょうか。ですが、3日や13日のように重複する日が出てしまうので、これを避けたいということですよね。
これを「自動的に行う」ということであれば、3日のような例外処理もあるので、VBAでプログラムを作成するという必要があるでしょう。こちらについては、諸条件を明確にしていく必要がありますので省略します。

ですので、もう少し手順を簡単にするという方向性でしょうか。
現在は、コピペで名前を入力...続きを読む

Q当番表をエクセルで作りたい

今現在社内での月ごとの当番表を作っているのですが、曜日に合わせて自動で入力できるようにしたいです。


      1  2  3  4  5  6  7  8  9
      月 火 水 木 金 土 日 月 火
社員1 A   ○    ○           ○

社員2 B     ○      ○

社員3 B     ○      ○

社員4 A   ○    ○           ○

横に日にちと曜日、縦に社員の名前とシフト名を並べています。
シフト名がAならば火、木当番。
Bならば水、土が当番という形で○をつけています。
そしてこのシフト名はEまである状況です。

社員数が30名ほどあるし、並び順は年齢順ですので一人ずつ入れると大変です。
客先への出張があって、来月はシフトAからDに当番変更ということがよくあったりします。

なのでこのシフト名を変えれば自動で曜日に合わせて○を入れてくれるようにしたいのです。

いろいろ考えましたが、自分ではどうしてもうまく作れません。
どうかよろしくお願いします。

Aベストアンサー

No.3です!
たびたびごめんなさい。

前回の投稿で文章に誤りがありました。

>D4セル(表示形式はそのまま・・・

はD4セルではなく、C5セルの間違いです。

C4・C5セルを範囲指定しオートフィルで列方向にコピーしてください。
何度も失礼しました。m(__)m

QEXCEL 当番表の作り方

条件

・13名
・1日1名
・曜日関係なし

この条件で当番表を作成したいのですが、何か関数を使用して簡単に当番表を作ることはできますか?

Aベストアンサー

当番表の様式が書かれていないので添付図の2例を想定しました。

上の表は日付ごとに名前を割り付る場合
1.黄色部分を入力する
2.5月1日の下のセルに式 =A2+1 を入力する(理由5月1日がA2)
3.この式を下までコピーする。
4.山田の下のセルに式 =B2+3 を入力する(理由青木がB2、名前3人)
5.この式を下までコピーする。

下の表は名前ごとに月日を指定する場合
1.黄色部分を入力する
2.5月1日の右のセルに式 =B10+3 を入力する(理由5月1日がB10、名前3人)
3.この式を右端までコピーする。
4.5月1日の下のセルに式 =B10+1 を入力する(理由5月1日がB10)
5.この式を表の斜め右下まで全セルにコピーする。

以上()内に理由をかきましたが、実際のセル位置人数で作成してください。

QVLOOKUP関数を使い掃除当番表を作る

エクセルでA2~D10までに氏名、E列は日付をいれ、当番表をつくります。
氏名と日付を一覧にするため、氏名の表示されたG列、
下記の関数をH列に入れ当番日付を表示していますが、
C列、D列に入力した氏名の当番日付をH列に表示させるには、どうしたら良いのでしょうか?
当番表に氏名がない場合は空白セルとしています。

=IFERROR(IFERROR(VLOOKUP(G2,A2:E11,5,FALSE),VLOOKUP(G2,B2:E11,4,FALSE)),"")

Aベストアンサー

こんばんは!

>C列、D列に入力した氏名の当番日付をH列に表示させるには・・・
とありますが、A~D列という解釈で・・・

A~D列に重複はない!という前提です。

↓の画像でH2セルに
=IF(COUNTIF(A$2:D$11,G2),INDEX(E$2:E$11,SUMPRODUCT((A$2:D$11=G2)*(ROW(A$2:A$11)-1))),"")
という数式を入れ、フィルハンドルで下へコピーしています。
(セルの表示形式は「日付」にしてください)

こんな感じではどうでしょうか?m(_ _)m

Qエクセルで曜日指定のカレンダーを作りたい

お掃除当番表をExcelで作っています。
当番は火金だけなので、1年間のカレンダーを作りたいのですが、オートフィルでやってもずれてしまいます。
日付を手入力で、曜日をWEEKDAYで表示するくらいしか思いつかないのですが、他に何か便利な方法はありますか?

Aベストアンサー

横に設定する場合の例
A1=2007/1/5 として表示する最初の日をセット
A2=TEXT(A1,"aaa")
B1=A1+IF(WEEKDAY(A1)=3,3,4)
B2=TEXT(B1,"aaa")
としてB列を右方向にコピーする。
1行目の表示形式は、適選で変更してください。
※実際は祭日は休みにするとか条件が増えそうですが....

Qエクセルで当番表をつくりたいのですが、簡単な関数を使ってできません。私

エクセルで当番表をつくりたいのですが、簡単な関数を使ってできません。私のレベルは中級くらいです。当番表の内容は、21名がそれぞれ所有する田んぼの面積に応じて田んぼの水を入れる当番です。当番は二人一組で、行います。面積の広い人は、回数が多く、少ない人は回数が少なくあたるようにします。公平なものにならなくてはいけません。3~4か月間の毎日です。同じ面積の人も10名位いるので、私は、全体面積に対する割合を出して、間隔日数を出す。後・・それぞれの割当たる間隔日数を崩さずに当たるようにする。・・・などあるのですが、・・私には、難しいので、どうかそんなの簡単だと思われる方は、至急回答お願いします。できたら、私でも理解しやすい表現で回答いただけたら、うれしいです。よろしくお願いします。

Aベストアンサー

#4です。以下貼り付けください。
Sub Toban()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Rng As Range
Dim r As Integer, c As Integer, p As Long, q As Long
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Set Ws3 = Worksheets("Sheet3")
Ws1.Select
Set Rng = Cells(1, 1).CurrentRegion
With Rng
.Copy
.PasteSpecial Paste:=xlPasteValues
.Sort _
Key1:=Cells(1, 3), _
Order1:=xlDescending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
Sortmethod:=xlPinYin
End With
For r = 1 To 21
For c = 1 To Cells(r, 3)
Cells(r, c + 3).Value = Cells(r, 1) & c
Next c
Next r
Ws2.Select
Dim Hiduke As Date
Hiduke = InputBox("開始日入力。yyyy/m/d")
q = 0
For p = 0 To 178 Step 2
Range(Cells(1 + p, 1), Cells(2 + p, 1)).Value = Hiduke + q
q = q + 1
Next p
q = Ws1.Cells(1, Columns.Count).End(xlToLeft).Column
For p = 4 To q
Range(Ws1.Cells(1, p), Ws1.Cells(Rows.Count, p).End(xlUp)).Copy
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll
Next p
Cells(1, 2).Delete
Set Rng = Cells(1, 1).CurrentRegion
For p = 0 To 89
Cells(p + 1, 4).Value = Cells(1, 1) + p
Cells(p + 1, 5).Value = Application.WorksheetFunction.VLookup(Cells(p + 1, 4), Rng, 2, 0)
Cells(p + 1, 6).Value = Application.WorksheetFunction.VLookup(Cells(p + 1, 4), Rng, 2, 1)
Next p
Set Rng = Cells(1, 4).CurrentRegion
Range(Cells(1, 4), Cells(1, 4).End(xlDown)).Copy Ws3.Cells(3, 1)
Range(Ws1.Cells(1, 1), Ws1.Cells(21, 2)).Copy
Ws3.Cells(1, 2).PasteSpecial Transpose:=True
Ws3.Select
Range(Columns(2), Columns(22)).ColumnWidth = 6
Dim Ret As Integer
For r = 1 To 90
For c = 5 To 6
Ret = Application.WorksheetFunction.Match(Left(Ws2.Cells(r, c), 1), Ws3.Rows(1), 0)
With Ws3.Cells(r + 2, Ret)
.Value = "■"
.HorizontalAlignment = xlCenter
End With
Next c
Next r
Set Ws1 = Nothing
Set Ws2 = Nothing
Set Ws3 = Nothing
End Sub

#4です。以下貼り付けください。
Sub Toban()
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Rng As Range
Dim r As Integer, c As Integer, p As Long, q As Long
Set Ws1 = Worksheets("Sheet1")
Set Ws2 = Worksheets("Sheet2")
Set Ws3 = Worksheets("Sheet3")
Ws1.Select
Set Rng = Cells(1, 1).CurrentRegion
With Rng
.Copy
.PasteSpecial Paste:=xlPasteValues
.Sort _
Key1:=Cells(1, 3), _
Order1:=xlDescending, _
Header:=xlNo, _
Order...続きを読む

Qマクロで当番表

Excelマクロで当番表を作成しているのですが、わからない事があるのでお教えください。
例えば1週間毎にAさん、Bさん、Cさん、Dさん4人を振り分けたいのですが、分岐、判断方法がわかりません。
1年間のカレンダーは出来上がっています。
当方の企業は完全週休2日で祝祭日も休みです。カレンダーの休日にはセルを塗りつぶしています。(マクロで34の薄い水色です。)
そこで、休日セルの塗りつぶしを背景で、日曜日~土曜日までを曜日で情報を受け取り作成したいのですが、うまくいきません。
月曜から金曜までをAさん、次の週の月曜から金曜までをBさんにしたいのです。
また、Dさんが終わればAさんに戻る。
下記は曜日と背景の例です。
if then ElseでもDo until loopでも他の方法でもよろしいのでお教えください。
曜日=Right(Sheets("カレンダー").Cells(行, 列).Value, 1)
背景 = Cells(行, 曜日列).Interior.ColorIndex

Aベストアンサー

#3です。

> ただ、4月28日から5月7日までの長期連休時はにBさんが抜けます。
> また、myList = Array("Aさん", "Bさん", "Cさん", "Dさん")で人数が変わってもよいのでしょうか?

1週間以上の休みを想定してませんでしたので、人数変更と合わせて修正してみました。

Sub Test2()
Dim r As Range, myList, i As Integer, j As Integer, flg As Integer
i = 0: flg = 0

For j = 2 To 24 Step 2
  ActiveSheet.Columns(j).ClearContents
Next j

myList = Array("Aさん", "Bさん", "Cさん", "Dさん", "Eさん")
For j = 1 To 24 Step 2
 With ActiveSheet
  
  For Each r In .Range(.Cells(2, j), .Cells(65536, j).End(xlUp))
    If Weekday(r, vbMonday) <= 5 Then
     If r.Interior.ColorIndex <> 34 Then
       r.Offset(0, 1) = myList(i): flg = flg + 1
     End If
    Else
     If Weekday(r, vbMonday) = 7 And flg > 0 Then
       i = i + 1: flg = 0
       If i > UBound(myList) Then i = 0
     End If
    End If
  Next r
 End With
Next j
End Sub

#3です。

> ただ、4月28日から5月7日までの長期連休時はにBさんが抜けます。
> また、myList = Array("Aさん", "Bさん", "Cさん", "Dさん")で人数が変わってもよいのでしょうか?

1週間以上の休みを想定してませんでしたので、人数変更と合わせて修正してみました。

Sub Test2()
Dim r As Range, myList, i As Integer, j As Integer, flg As Integer
i = 0: flg = 0

For j = 2 To 24 Step 2
  ActiveSheet.Columns(j).ClearContents
Next j

myList = Array("Aさん", "Bさん", "Cさん"...続きを読む

Q【大至急お願いします!!】エクセルを使ってシフト表を作成したい

【大至急です!!】
エクセルを使ったローテーションの作成方法を教えてください!!
エクセル初心者です。

人事異動で以下のような窓口当番のローテーションを作成することになりました。

会社のパソコンのセキュリティ上フリーソフトは使用できず、また、私自身のパソコンスキルからエクセルを使用して作成するよりほかないと考えています。
(私自身はマクロは使えません。)

エクセルのバージョンは2010です。

どのような方法があるか詳しくお教え下さい。

1.10名程度で2つの窓口を担当する。

2.1つの窓口に1名の担当者がつきます。

3.担当者は午前と午後で交代する。(=2名×2名で1日つき4名が必要)

4.休暇や繁忙時期を考慮する必要があるため、適宜担当できない日を考慮する必要がある。(繁忙期や休暇というのは、人によって取得日が違うため個別対応が必要という意味です。)

5.担当者の経験が分かれるため、10名を2グループに分け、なおかつ顔合わせもランダムになるようにしたいです。



ざっくりしているかもしれませんが、以上です。宜しくお願いします。

【大至急です!!】
エクセルを使ったローテーションの作成方法を教えてください!!
エクセル初心者です。

人事異動で以下のような窓口当番のローテーションを作成することになりました。

会社のパソコンのセキュリティ上フリーソフトは使用できず、また、私自身のパソコンスキルからエクセルを使用して作成するよりほかないと考えています。
(私自身はマクロは使えません。)

エクセルのバージョンは2010です。

どのような方法があるか詳しくお教え下さい。

1.10名程度で2つの...続きを読む

Aベストアンサー

>窓口が午前・午後各2名ある場合は各列にコピペして増やせば良いのでしょうか
いや、全員を2つのグループに分けてそれぞれのグループから1人ずつという風に理解していたので、その表は一人しか選びません。だって、経験によって2つのグループに分けるのですから、多分ベテランと新人のグループに分けるんでしょう?ですから、ベテラン用の表と新人用の表を2つつくってそれぞれから1人ずつ選ぶという使い方を想定しています。
もし一つの表で2人選ぶということであれば(もちろんそれが要求仕様なのですが)、根本的に作り替えなければならないので、申し訳ないですがお手伝いできないです。
ただ、別の方がアイデアをお持ちかもしれませんので、その「担当者の経験が分かれるため、10名を2グループに分け」が具体的にどういう意味なのか捕捉されておくとよいでしょう。不躾ながら正直言うとベテラン用と新人用で分けてそれぞれから一人ずつ選べばいいんじゃないかなぁ、としか思えないのです。

>お教えいただいた形の場合、何か入力するたびに再計算されるのですが、そもそもそうゆうものなのでしょうか?
そうです。ですから、エクセルの設定を手動計算にする必要があります。
リボンに「計算」というタブがあります。そこに「計算方法の設定」という項目がありますから、そこで設定します。詳しくはこちらをどうぞ↓。
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=012854
再計算するにはF9を押します。

>午後当番→同じ方が午前当番となってしまう事例が発生しています
それはそうなると知っていました。午前と午後で交代するということだけだったので、日付が変われば午後と午前でつながってもいいという意味だと思っていました。でも午後-午前も一緒に禁止する方が実装するのは簡単です。Plan Optimized の部分は第一日目の午前を除いて、全部同じにすればいいです。つまり第一日目の午後をそのままま全シフトにコピーすれば午後-午前もなくなります。
ただ前の月の最後のシフトとの関係は人間が確認しなければならないです(これは前のバージョンでも同じ)。

>何度再計算しても各人の当番回数がかなりばらついてしまいます。
そうですね。それは手で調整することを想定しています。私の手元では5人の表を作ったので何回かやるといい感じのが出てくるのですが、それでも特定の期間にかたまってしまうというようシフト表になってしまいます。10人でやるとさらに理想的なシフト表ができにくいかもしれません。でもまるっきり白紙の状態から手で作るよりはかなり楽になるのと思うのですが。
また、本質的な解決方法じゃないですが、過去の3シフトに入っていた人からは選ばない、というような条件を付け加えると、少しはましになるようです。「過去の3シフト」の縛りを加えるには、Plan Optimized の項目で第2日目の午後シフトを =If(CountIf(B24:D24,"√")>0,"x",If(E4="x","x","")) として下と右にコピーしていきます。ただし、この縛りを入れると、とても規則的なシフト表になるとか、誰も入れない日がいくつも出てくるとか、別の問題も出てきます。

>パソコンに詳しい方からすれば無茶な質問であることは理解しております。
私はそうは思いませんが、ただエクセルのファイルのままで渡せないとかいうのがありますので、こういう掲示板でやり取りするとちょっと時間かかるのはたしかですね。

>窓口が午前・午後各2名ある場合は各列にコピペして増やせば良いのでしょうか
いや、全員を2つのグループに分けてそれぞれのグループから1人ずつという風に理解していたので、その表は一人しか選びません。だって、経験によって2つのグループに分けるのですから、多分ベテランと新人のグループに分けるんでしょう?ですから、ベテラン用の表と新人用の表を2つつくってそれぞれから1人ずつ選ぶという使い方を想定しています。
もし一つの表で2人選ぶということであれば(もちろんそれが要求仕様なのですが)、根本...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング