VBAでタイトルのような当番表を作りたいと考えています。
こちらにある質問やご回答を参考にいろいろ試しましたが、
なにぶんVBAはド素人のためお手上げ状態です。よろしくお願いします<(_ _;)>
カタチとしては以下のような感じには出来ていますが、
しかし土日の休日や、祝日リストから参照しての休日が表示されるように関数を使用してしまうと、例えば、希望休や有休などを表に記入すると関数が消えてしまい、表内に関数を入れられません。
ならば希望休(有給含む)は手入力で先に入力して、それを条件付き書式で識別できるように色付けて、そして土日と祝祭日も条件付き書式で背景色を付ければ、ほら、休みがどこか分かりやすい!
と思ったのですが。
色のついていないセル(休みではないセル)にだけ当番を割り当てるってできるの?
てか色ってどうやって認識させられるんだろ?ってところで困っています。
そこでなにか方法があれば助けていただきたいです。
■sheetは2つあって、「祝祭休日」「当番表」とあります。
①sheet「祝祭休日」について
自動計算(関数や計算)で算出された祝祭休日の年間の年月日をリストしています。
・A1~A54=祝祭休日の分類、B1=当番表!A1、C1="祝祭日"、D1="備考"
・B2~B37=各祝休日の年月日、B38~B45=会社指定休日(ここは毎年変るので手入力)、
B46~B54=各イベント(クリスマスやバレンタインなど)の年月日、と分けてます。
・C2~C54=各祝祭休日の名称を記入してます。
・D2~D54=備考を書いています。
※ちなみに、こちらはこれで完成でいいかなぁと思っています。
②sheet「当番表」について
・A1=年(今なら"2022"を手入力)、A2=月(今なら"7"を手入力)、
・B1=DATE(A1,A2,1)、C1~AF1=左のセル+1
・B2~AF2=sheet祝祭休日から祝祭日の名称をXlookuoで引用
・B3~AF3=Weekday関数とaaaで曜日表示 ※sheet祝祭休日から条件付き書式で色が付くようにしています
・A3="氏名"、A4~A14="各従業員の氏名を手入力"しています。
※今は(仮)として10名(A14)にしていますが、部署によっては多いところもあり、
また入社があれば増え、反対に減ることもあるため、表は26名対応(A29)にしてあります。
・B4:AF29=当番表
※ここでは、希望休を"休"、有休を"有"と手入力したいと考えていて、
条件付き書式でそれぞれ色が付きます。また、sheet祝祭休日に応じて条件付き書式で
「土、日、祝、指定休」の列に色が付くようになってます。
・AG3="合計"、AG4~AG29=各当番の合計
・AH3~AK3="各当番名" ※例)AH3=燃、AI=プラ、AJ=段、AK=消毒
※部署によては当番が4~6項目ある場合もあって、当番の種類は固定されたものではありません。
・AH4~AH29=各従業員ごとに"燃"の合計、AI4~AI29は"プラ"の合計、
AJ4~AJ29は"段"の合計、AK4~AK29は"消毒"の合計・・・と、各従業員の行ごとに各当番の合計が続き、
つまり、この合計をAG4~AG29で各当番を合計しています。
■完成希望
各従業員の休み(希望休、有休)を土日祝の休みを考慮し、また、増減する人員に対応し、
ランダムに割り振られ、かつ月間で合計回数と各当番回数も平等に振り分けられるようにしたいと思っています。
※Aさんは毎月第一週の月曜日は固定というものではなく、
毎月何の担当するかはバラバラ、されど月合計ではみんな平等というような。
また、ややこしいのですが、当番の種類が部署によって異なるということと、
当番によっては「週に何回やるのか」「何人でするのか」も違っていて、
そういった変更にも対応できる、今後も使用できるものを想定しています。
ちなみに今作っている表では、以下のようにしたいと考えています。
・燃=週1回、4人
・プラ=週1回、1人
・段=週1回、1人
・消毒=毎日、1人
何かいい方法がありますでしょうか?
お手数をおかけしますがお力貸していただけないでしょうか。
よろしくお願いいたします。
No.21ベストアンサー
- 回答日時:
下記にアップしました。
https://firestorage.jp/download/6a63b7fd253b0451 …
https://firestorage.jp/download/fbf79c1f4fbef7c9 …
ブック内のマクロ(Module1)をあなたの環境に上書きしてください。
エラーメッセージ一覧.docxを作成しました。
表作成、作業人数設定時に、エラーが表示された場合に活用して下さい。
マクロ変更箇所
1.シート名を「祝祭休日」に変更しました。
2.コメントを追記しました。
3.当番表割当実行時、割当調整時の処理を変えました。
DOWN調整時、作業の移動先の従業員が存在しない場合、エラー表示後、当番表割当を打ち切っていましたが、
最後まで割当調整処理を行いようにしました。
UP調整時、作業の移動元の従業員が存在しない場合、エラー表示後、当番表割当を打ち切っていましたが、
最後まで割当調整処理を行いようにしました。
割当調整処理については、エラーメッセージ一覧.docxを参照ください。
ありがとうございます!
大変理想通りの表になりました!
今いろいろな状況をそうていしていますが、特に問題もなさそうです(^^)
今月中には何かあればご連絡いたします!
本当にありがとうございました♪
No.19
- 回答日時:
No18の誤記訂正です。
3.割当履歴シート
誤:表作成を行った時の、合計値(AG列の値に相当)を割り当てシートに書き込みます。
正:表作成を行った時の、合計値(当番表AG列の値に相当)を割当履歴シートに書き込みます。
No.18
- 回答日時:
下記にアップしました。
https://firestorage.jp/download/2fb3c5c49d372171 …
1.祝際休日シートの件
①当番表の2022の位置が変わったためエラーになっていましたので、とりあえずこちらで修正しておきました。
②シート名ですが「祝祭休日」でなく「祝際休日」としたのは、何か意図があるのでしょうか。(祭と際)
もし、「祝祭休日」にする場合は、その旨連絡ください。現行通りであれば、連絡不要です。
2.当番表シートの件
①AG列の合計が、消毒までしか対応していません。最大10件まで定義しても対応できるようにしてください。
3.割当履歴シートを追加しました。
このシートは、表作成を行った時、なければ自動的に作られますので、予め作っておく必要はありません。
(このシートを削除したのち、表作成を行ってください。そうすると自動的に作られることが確認できます。
但し、最初は非表示の状態になっています)
表作成を行った時の、合計値(AG列の値に相当)を割り当てシートに書き込みます。
F列(1月)~Q列(12月)の位置に書き込みます。
この値を使用して、割り当ての調整を行います。
例えば、従業員1~従業員10の10人構成で、67作業を1月に実行したとき
従業員2,3,8の人が作業数6件で、ほかの人が作業数7件になったとします。
2月に割り当てを行うとき、1月の履歴を参照すると、従業員2,3,8の人は、作業数を多く割り当てる
必要があるので、従業員2,3,8が割り当て順序の1番目~3番目に来るように調整します。
(従業員2,3,8の中でどの順番にするかは乱数で決めます)
上記以外の従業員は、4番目~10番目に来るように調整します。
(上記以外の従業員の中でどの順番にするかは乱数で決めます)
前回の実行履歴がない場合は、単純に乱数でシャッフルした順番で割り当てます。
これが、割当履歴シートの用途です。
以下のマクロが提供されています。
①割当履歴シート表示
作成時は、非表示になっています。これを表示に切り替えます。
②割当履歴シート表示
表示を非表示に切り替えます。
③割当履歴クリア
割当履歴をクリアします。
運用時は、通常上記のマクロを使用するのは、システム管理者だけなので、
公開不要のため、ボタンは設けませんでした。
4.作業項目の表示/非表示について
ボタンを設けましたが、暫定的なボタンです。見栄えの良いボタンに変えてください。
5.マクロの機能追加については、これで全て完了しました。
このブックのマクロで、機能確認をお願いいたします。
こちらでは、機能の修正は行いませんが、後々のことを考えメンテナンスがしやすいように、
マクロ内にコメントをもう少し追記しようと思っています。
2、3日以内に、再度マクロをアップする予定です。(コメントを追記したバージョン)
機能確認は、1週間程度をめどにおこなっていただきたいのですが、可能でしょうか。
ありがとうございます!
大変助かりました!
今さっそく使ってみておりますが、大変感激しております!
以下、ご回答にお答えします。
1.「1の②」の件、「祝祭休日」で間違いありません。確認不足です。
2.「2の①」の件、当番表シートのAG列の合計も確認不足です(^^;
ご指摘ありがとうございます。
3.「5」の件、機能確認は今日からさっそく使わせていただきます。
なお「1週間程度をめどに」というのは、修正にはご対応いただけないということですが、エラーなどは対応いただけるとの理解でよろしいでしょうか?
No.17
- 回答日時:
レイアウト案を拝見しました。
ほぼ問題ないですが、下記の1点が非常に大きな負担になります。
作業日と人数の指定は、週1もしくは毎日の前提でしたが、
これが、最大週2もしくは毎日になっています。
週2の場合、祝日とかち合わなければ、問題ないですが、
どちらか、もしくは両方が祝日とかち合った場合に、どのように解決するかが、
基本的に処理内容をかなり見直さないといけなくなります。
週2というのは、本当に必要な要件でしょうか。
もう一度、再検討していただけませんでしょうか。
>もう一度、再検討していただけませんでしょうか。
週2にすることで処理内容をかなり見直さないといけないということであれば、そのまま「週1もしくは毎日(つまり今のままの作業曜日)」で問題ありません。
と言いますのも、No8のご回答の私のお礼コメントの中で、
>表作成後も直接入力でき、その後クリア実行しても手入力した作業割当分も消えたことから、振分け範囲をB5:AF10とし、クリア範囲をB5:AF80と考えました。
と書きましたように、表作成後であっても、設定され認識される作業項目であれば、クリアボタンを押すことで消すことができたからです。
こちらで週2必要な場合は、必要ヵ所に直接入力いたします。
よろしくお願いいたします。
No.16
- 回答日時:
>結果、DL時の設定値そのままの状態で、上記手順を行った場合、以下の通り振分けられていない日が見つかりました。
・3/22、23
・5/6
・7/19、20
・8/11
・9/20、21
・10/11、12
8/11は山の日のため、休みになります。
他の日はバグのため、出力されていませんでした。
ご指摘ありがとうございました。
下記に修正版をアップしました。ご確認をお願いします。
https://firestorage.jp/download/c602070782c1f07e …
現在、新しいレイアウト用に修正中ですが、割り振りの機能はアップしたものと変わっていませんので、引き続き確認作業をお願いいたします。
No.15
- 回答日時:
シャッフルの件ですが
>例えば、別のsheet(隠しsheetで見えなくしててもマクロ的にOKなら隠しsheetなど)に、シャッフルした表で割り振りを行い、VLOOKUP的な方法でsheet当番表の各従業員毎に引用する、というのはいかがでしょうか?
イメージ的には、そのようなことをするということで理解していただいて問題ありません。
(実際には、乱数を使用するので、隠しSheetもVLOOKUP関数も使用しません)
1.シャッフルをしても、当番表の従業員の表示順は一切変わらない。
2.シャッフルにより、毎月の従業員の割り振り順番がランダムに変化する。
上記の2点が保証されます。
No.14
- 回答日時:
>●「追伸」に関して
感が悪くて申し訳ないのですが、「1日に1つの作業に割り当て可能な最大の人数は、9人」という理由?根拠?言葉が分かりませんが、どのような理屈で「9人」となっているのでしょうか?ご説明いただけると幸いです。
また、ご回答いただけましたらすぐに返答いたします。
上記の件ですが、
https://gyazo.com/2140b1e0597e7c65ba048af81c92358e
のAH5~AK5(燃、プラ、段、消毒)の人数の記入可能な上限値を
決めてください。という意味です。
燃、プラ、段、消毒ともに上限値は同じ値にしたいと考えています。
(下限値は1)
1~Nまでが記入可能とするときの、Nの値を決めてください。
No.13
- 回答日時:
>作業回数の均等化のこともあって難しいかもしれませんが、従業員の並びは、役職や入社年月日順のため、シャッフルせずにできる方法があると大変助かります。
回答:
シャッフルは、内部メモリで行います。見た目は、そのまま表示されている順序の通りです。
従業員A,B,C,D,E,Fの順に並んでいるとき、
例として、乱数の値により
7月は、C,F,E,A,B,Dの順に割り当てる。
8月は、B,A,E,F,D,Cの順に割り当てる。
ということをおこないますが、表示上は常にA,B,C,D,E,Fの順に並んでいます。
シャッフルをせずに、常に固定の順番でおこなうと、
割当に偏りがでます。
例えば、従業員A,B,C,D,E,Fの順に割り当てると、
A,Bは常に多くなる可能性があります。
E,Fは常に少なくなる可能性があります。
このケースでは従業員6人なので、作業件数32件を処理すると、
A,Bは6件、C,D,E、Fは5件割り当てられます。
(休み等で多少のぶれがある可能性はありますが、ほぼこのようになります)
これが、毎月繰り返されます。
これで良いのでしょうか。
No.12
- 回答日時:
>●「追伸」に関して
感が悪くて申し訳ないのですが、「1日に1つの作業に割り当て可能な最大の人数は、9人」という理由?根拠?言葉が分かりませんが、どのような理屈で「9人」となっているのでしょうか?ご説明いただけると幸いです。
また、ご回答いただけましたらすぐに返答いたします。
現在、熱は1日4人を割り当てていますが、最大1日9人とします。という意味です。最大99人でもOKですが、そもそも、1日に同じ作業をやるのは9人程度あれば十分かと考えました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 求人情報・採用情報 月単位、週40時間の変形労働時間制で、 日曜祝日土曜半日の固定休+シフト制(平日一日)の企業の場合、 1 2023/08/10 23:43
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- 労働相談 有給計算について 回答お願いします。 建設業経営です。休日は日曜のみ 従業員の有給計算について 雇い 2 2023/03/26 06:12
- Excel(エクセル) 当番表の作成 2 2022/06/15 07:40
- Excel(エクセル) 出勤簿の土、日、休日に色付けできない 2 2022/08/04 20:10
- Excel(エクセル) エクセルで当番表を作成したいです。 1 2023/08/09 19:53
- アルバイト・パート サービス業をしてる個人会社で週4のパートで働いてます。 最初は週3で働いてましたが今年から週4に増や 2 2023/03/02 21:52
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- 求人情報・採用情報 どれくらいの応募で難易度でしょうか。 4 2023/08/07 22:14
- 会社・職場 仕事として当然? 私は土日祝休みの職場でSNS配信の担当をしている契約社員です。(メイン業務ではなく 3 2022/04/16 17:28
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
店員も客も斜め上を行くデパートの福袋
シュールを通り越して店員も客も斜め上を行くデパートの福袋に入ってそうなものを教えて下さい。 よかったらレビューもしてください。
-
Excelで当番表の作成(休み考慮、完全ランダム)
Excel(エクセル)
-
エクセルで少し複雑な当番表を作成したい。
Excel(エクセル)
-
エクセル 当番表の作り方 エクセルで土日祝日を除いた、平日のみの当番表を作りたいです。 カレンダーま
Excel(エクセル)
-
-
4
エクセルで不可日と祝祭日の考慮してランダムに毎日の当番表を作成したいと思っています。
Excel(エクセル)
-
5
掃除当番表の作り方でいい方法がないでしょうか。
その他(ソフトウェア)
-
6
マクロで当番表
その他(プログラミング・Web制作)
-
7
Excel 数式を入れているため、当番が繰り返し循環しない
Excel(エクセル)
-
8
エクセルで当番表を作成したいです。
Excel(エクセル)
-
9
Excelにて年間の当番表作成したい
Excel(エクセル)
-
10
エクセルの当番表を作っていますが教えてください
Excel(エクセル)
-
11
当番表の作成について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル関数:文字だけでなく...
-
LINEのこの空白ってどんな意味...
-
エクセルでオートサムを使った...
-
エクセルで 来年の曜日の自動設定
-
エクセルの計算式でコンマを付...
-
EXCEL 連動したドロップダウン...
-
エクセル 数式の無効化
-
エクセルで「-3E+06」と...
-
bashでの空白と空文字の判断
-
エクセルで休日の「休」という...
-
Excelのテーブル上のセルの保護...
-
空白部分に連番の数字を記入し...
-
エクセルでleft関数の結果が表...
-
エクセルの計算結果に+(プラス...
-
PowerPointの表内のカンマ
-
エクセルで、タイム計測の管理...
-
文字列を含む連続データの入力
-
「 - 」と「 _ 」 の違い
-
EXCELでタイトル行と一番下の行...
-
VBAを利用して宛名ラベルを作り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル関数:文字だけでなく...
-
DATEDIFで作成した勤務年数の並...
-
エクセルで縦計と横計が正しい...
-
Excel 書式のクリア・値貼付け...
-
Excel : 先月の年と月
-
従業員増減対応で当番種類の増...
-
重複データの抽出について
-
セルの立体的表示方法!!!
-
index関数の説明をお願いします。
-
条件付き書式 別のシートで色付...
-
書式のみ保護
-
エクセル 条件付き書式で色の...
-
Excelの関数について教えてくだ...
-
エクセル期日を過ぎているもの...
-
エクセルで色付きセルをカウン...
-
PowerPointの表内のカンマ
-
EXCELでタイトル行と一番下の行...
-
【VBA】PDF出力に任意のファイ...
-
エクセルの計算式でコンマを付...
-
LINEのこの空白ってどんな意味...
おすすめ情報
1,に関して
ケース①の「同じ日に4人を割り当て」です。
※その他「週何回、何人でするか」という設定が出来るならば、「何人でするか」の部分は全て同じ日に割り当てとなります。
2,に関して
②の「(イベント含む)」という部分のみ補足いたします。
sheet祝祭休日にイベントの項目があり、sheet当番表に反映され、「今日は何の日か」というところでB2~AF2上でクリスマスやバレンタインデー、ホワイトデーと表示されます(もちろん他祝日も表示されます)。ですが、こういったクリスマスなどは祭日ではあっても国民休日には当たらないため仕事となります。そのため、②に関しては下記以外となります。
②シート:「祝祭休日」のB2~B54の日付(イベント除く)
※つまり「祝日(元旦~勤労感謝の日)、その他(お盆や大晦日)、会社指定休日」が仕事休み
「イベント(バレンタインやひな祭り、クリスマス)」は仕事
3,に関して
現時点で設定してるのは4項目(燃、プラ、段、消毒)ですが、部署によっては6項目ある部署もあるため、増えて6項目になっても対応できるものを望んでいます。
(例)現時点で「AH3~AK3」に「燃、プラ、段、消毒」と入っていますが、「AL=トイレ」や「AM=休憩室」と項目が追加されたり、あるいは減っても、週何回で何人でするかという設定をすると反映される、というようなものです。
4,に関して
マクロではなく関数式で算出するように関数式を入れてあります。
5,に関して
sheet当番表のA1に入れている「年(2022年)」をsheet祝祭休日のB1に引用しており、そのB1を基としてB2~B54に、それぞれの祝祭日に合った計算で日にち(シリアル値)が算出されるようになっていて、そのシリアル値をユーザー定義から「m/d」としています。
6,に関して
そのご理解であっております。
sheet当番表
sheet祝祭休日
旧当番表
以下、お役に立てば...
マクロは組んでいませんが、必要ヵ所に関数式が入っていると思います。条件付書式や関数式、その他ご確認いただき活用いただければと思います。
『~Excel19Ver』
https://ac-data.info/d/FntBHuurcDY
sheet当番表のB2~AF2の参照時、Xlookupに対応していないためINDEX、MATCHで参照してます。
『Excel21~365Ver』
https://ac-data.info/d/5AyNzBsij2o
こちらはXlookupで参照してます。どちらかお使いください。
※sheet当番表のAG1に歴日数「=TEXT(DAY(EOMONTH(B1,0)),0)」、A30に記入されている従業員数「=SUBTOTAL(103,A4:A29)」がありますが、何かお役に立てれば…と置いてますが、必要なければ消して構いません。