解決済み
エクセル詳しい方アドバイスお願いします!!勤務表フォーマットをエクセルで作成する宿題があり、 提出期限まで2日しかなく困っています☆(T^T) ☆状況と条件☆ ・エクセルでスタッフ10名の月毎勤務表 ・1日の勤務は2名 ・同じ組み合わせ(AさんとBさん)は月に2回まで ・使用するのはシニアが多いのでわかりやすいもの ・シフトを組んでいる際に、同じ組み合わせができてしまったら エラーメッセージやセルの色が変わるなどのわかりやすい表示 イメージとしては http://www.template-sozai.com/template/66 ↑こんな感じの表で、出勤のセルに「○」を入力して その○が同じ組み合わせのときはわかるようにしたいという感じです★ スタッフが増えた場合や入れ替えがあっても編集できるように なるべくわかりやすい関数や条件で作成したいのが希望です(^^; どうぞよろしくお願いいたしますm(_ _)m
274閲覧
「VBA」で組みました。 列「A」が氏名。 1行目が「日」、2行目が「曜日」、ということで、実際のデータは3行目から26人で試しましたので、「28」行目まで、列「B」から、31日目の列「AF」までとし、「○」が重複する組み合わせをカウントし、3回を超えると、その組み合わせのセルを赤くしています。 目的のエクセルファイルを開き、「Alt+F11」(「Alt」(「オルト」と読みます)キーを押しながら、「F11」を押す)で、「Visual Basic」の画面を出し、メニューから「挿入」→「標準モジュール」を選択すると、画面の右側が白くなりますので、そこに、以下のマクロをコピー&ペーストします。 念のため「F12」(「名前を付けて保存」)で、ファイル名が表示されている行のすぐ下の行、右端の「∨」をクリックして、「Excel マクロ有効ブック」を選んで、保存しておいてください。 あとは「F5」で実行するだけです。 Sub Test() Dim n(25) As Integer For i = 3 To 28 For j = 0 To 25 n(j) = 0 Next j For j = 2 To 32 If Cells(i, j).Value = "○" Then For k = i + 1 To 28 If Cells(k, j).Value = "○" Then n(k - 3) = n(k - 3) + 1 If n(k - 3) > 2 Then Cells(i, j).Interior.ColorIndex = 3 Cells(k, j).Interior.ColorIndex = 3 End If End If Next k End If Next j Next i End Sub 簡単な説明です。 Dim n(25) As Integer 重複を調べるため、26人分、配列変数を用意。 For i = 3 To 28 人数分(=行)処理。 For j = 0 To 27 n(j) = 0 Next j まず、配列変数を初期化しています。 For j = 2 To 32 1日から31日まで。 If Cells(i, j).Value = "○" Then もし、「i」番目の人の「j」列目(=日)の人に「○」が入っていたら、 For k = i + 1 To 28 「i」番目の人の次の人から、その下の人を調べます。 If Cells(k, j).Value = "○" Then もし、その(同じ日)下の人で「○」が付いている人がいたら、 n(k - 3) = n(k - 3) + 1 その人をカウントします。 If n(k - 3) > 2 Then 今、カウントした値が「2」を超えたら、 Cells(i, j).Interior.ColorIndex = 3 調べている元の人のセルを赤くし、 Cells(k, j).Interior.ColorIndex = 3 調べた人のセルも赤くしています。 あとは終了処理です。 冒頭の、「For i = 3 To 28」ですが、 「For i = 3 To 28」の「28」を「Range("A1").End(xlDown).Row」とすれば、自動的に、データの入っている最終行になります。
< 質問に関する求人 >
シニア(東京都)この条件の求人をもっと見る
求人の検索結果を見る
< いつもと違うしごとも見てみませんか? >
覆面調査に関する求人(東京都)この条件の求人をもっと見る