• ベストアンサー

Excel 毎週金曜日に4か所の勤務場所をランダム

シフト勤務表で毎週金曜日に添付図のように仮に茂木氏に「東京」「愛知」「京都」「大阪」の名称をランダムに振り当てたいと考えています。添付図は日にちを省略しているので3か所しかありません。 57~59行のカレンダーは「C2」の年と「E2」の月を選択することで表示しています。祝日は別シートに祝日リストを用意してそれを参照しています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

こんな感じの解説でいいですか? Sub Sample()   Dim sData, i   '↓勤務場所の配列を作っています   sData = Split("東京,愛知,京都,大阪", ",")   '↓一ヶ月分なのでD列(4列目)から31日分(34列まで)ループを回します(これが列になります)。   For i = 4 To 34 ’←ANo.2では「35」となっていますが34で十分でした(^^;          '↓その列の58行目のセルの文字列が「金」なら……     If Cells(58, i).Text = "金" Then              '↓その列の55行目に勤務場所の配列からランダムに選んだ1つを表示       Cells(55, i) = sData(Int(Rnd() * 4))     End If   Next i End Sub

noname#194986
質問者

お礼

ご丁寧に解説戴きましてありがとうございました。今後もよろしくお願いします。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

じゃあ、VBAで Sub Sample()   Dim sData, i   sData = Split("東京,愛知,京都,大阪", ",")   For i = 4 To 35     If Cells(58, i).Text = "金" Then       Cells(55, i) = sData(Int(Rnd() * 4))     End If   Next i End Sub 月が変わるたびに動かしてください。

noname#194986
質問者

補足

マクロの実行毎に行い他のセルの入力で変化する事はなくなりました。ありがとうございました。つきましてはづうづしいお願いですが解説を戴けると勉強になります。よろしくお願いします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

曜日が文字列で「金」と入っているなら =IF(D58="金",INDEX({"東京","愛知","京都","大阪"},INT(RAND()*4+1)),"") 曜日は日付のシリアル値を書式で曜日表示にしているなら =IF(WEEKDAY(D58)=6,INDEX({"東京","愛知","京都","大阪"},INT(RAND()*4+1)),"") ↑これをD55セルに入れて右にコピー

noname#194986
質問者

補足

早速回答ありがとうございます。確認したところどちらでも成功しました。ただ、他のセルに何か入力するたびにセルの内容が変化します。1回確定するとそのまま固定する対処方法はないでしょうか。よろしくお願いします。

関連するQ&A