• 締切済み

エクセルVBAの質問です

エクセルVBAの質問です 今勤務表を作成しているのですが 日1・日2・遅1・遅2・早1・早2・休 等を自動的にランダムで振り分けることはできるのでしょうか? 拙い説明でわかりにくいと思いますが、どうぞよろしくお願いします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

VBAを使わなくとも作業振り分け用のシートを用意してそれを利用してはいかがでしょう。 例えば次のようにします。 A1セルには氏名または職員番号、B1セルには勤務振り分けとでも入力し、B列の2行目から下方に日1、日2などの表示をさせます。 そのための作業列を設けます。 D2セルから下方にお示しの日1、日2などをD8セルまでに入力します。 E2セルからE8セルまでにはそれぞれの勤務形態で必要な人数を8とかの数値で入力します。 F2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(D2="","",SUM(E$2:E2)) H2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(ROW(A1)>SUM(E$2:E8),"",RAND()) 最後に答えを表示させるためにB2セルには次の式を入力し下方にオートフィルドラッグします。 =IF(AND(COUNTA(A$2:A2)>MAX(F:F),A2<>""),"作業人数が予定人数(I列)を超えています、同じになるようにH列の人数を調整してください",IF(A2="","",IF(RANK(H2,H:H,1)<MIN(F:F),D$2,IF(COUNTIF(F:F,RANK(H2,H:H,1))=0,INDEX(D$2:D$8,MATCH(RANK(H2,H:H,1),F:F,1)),INDEX(D$2:D$8,MATCH(RANK(H2,H:H,1),F:F,0)-1))))) ここで得られたデータをもとに別なシートでシフト表などを作成すればよいでしょう。

回答No.1

>自動的にランダムで振り分けることはできるのでしょうか の意味ですが、社員のシフトを自動的に振り分けるという意味でしょうか。 それとも出勤データを何らかの基準で集計する目的で並べ変えるということでしょうか。 やりたいことをもう少し具体的に書いていただければアイデアは出るかもしれません。 基本的に、ランダムなデータを発生させるにはRandmaize関数を遣いますが、それをどう活用するかは目的やデータ次第です。 その辺をもうちょっと具体的に知りたいところです。

関連するQ&A