掲示板
受付終了

EXCELの関数にお詳しい方に質問

IMG_20240918_194906.jpg

エクセルで自動で勤務表を作成できないか試作中なのですが

左の勤務形態を重複なく、かつ漏れなく各勤務者に割り振る必要があるとします。
それだけならできてるんですが、ここから更に複雑な条件があります

1、漏れなくかつ重複なく割り振る
2、AさんとBさんは『へ』と『と』の勤務はやらない
3、GさんとHさんは『い』と『ろ』の勤務はやらない

2と3を満たすだけなら、AさんBさん用と、GさんHさん用の乱数表をそれぞれ別に作成すれば良いだけなんですが、それだと1の『重複なく漏れなく』をクリアできないんですよね。
 それをクリアするには同じ乱数表を使うのを余儀なくされます。

しかし、その場合、AさんBさんは『へ』と『と』の勤務を除外して、かつ残りの勤務からランダム抽出して、GさんとHさんにも同様の条件付けて、かつ全員の勤務で重複なし、かつ漏れなし
 そんな条件の関数を作成する事可能ですか?
 VBAとかはなしです。自分でそれが使えるなら最初からそれで考えてます。

もう10日間くらい悩んでます。
とりあえず知りたいのはどうゆう関数式になるか、ではなくエクセルの関数式のネストだけで可能かどうか、です。
できない事で悩むのは時間の無駄なので

Q&A向きですが
とりあえず、エクセルの知識は大してないので、1の条件も知恵袋の回答見て真似して全く同じ関数を作成しただけです。でもそれはできました。
 しかし、2と3がハードル高過ぎて
そもそもできますかね?

左の乱数表は例として出してるだけです。
実際はこれだけだと毎日同じ勤務になるので31日分の乱数表を作成してます。なので勤務はバラバラにはなります。


130 件のコメント
31 - 80 / 130

>> blue777 さん

アプローチとして面白いです。

実際の勤務者は17人です。かつ、勤務形態が21通りあるのですよ😳

その全ての組み合わせを全て書き出すのは、PCとて膨大な時間かかるかと。
100万通り超えるかも

>> blue777 さん

ありますねー
多少の偏りはやむを得ないけど、限度はあります。でも確率的にはある程度自然にバラけるような気はします

そして、省いてるだけで、まだ複雑な条件があるのですよ

でも、この全完成形から条件に合わせてソートする、てのは逆からのアプローチですが考え方としては新鮮ですねー
 高性能PCがあるならやってみたいかも

因みに『条件を指定して選別していく方法』は具体的にはどんな方法になるんですかね?

>> せんちゃん さん

いえいえ
くだらなくはないですよ。
スレを読んで頂ければ薄々分かると思いますが(笑)私、エクセルも大して知識ないのですよ。
 つまり自分で書いてるVBAとかも全然分かっておりません

 エクセルでの作成が無理ならVBAに挑戦してみようとは思っております。その時は質問させて頂きますので宜しくです

>> さと さん

ありがとうございます(^_-)-☆

ふふふ
質問しといて言うのもなんですが、この手のチャレンジはマイネ王国民にはワクワクするでしょ?(笑)

みなさんDIY好きですからねーー😆😆

>> アッカリ〜ン@_@….,….,…😅 さん

そう。
問題は、複数の条件に対して作成する関数が干渉するて事。
 私は無条件で排他処理をやってくれるのかと勘違いしてましたがそんな便利な機能はさすがに無いですね。

そこを踏まえると、エクセルの関数だけで作成するのは現実的でないですね

やはりVBAかなー
VBAだとほぼイチから勉強です😅

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>実際の勤務者は17人です。かつ、勤務形態が21通りあるのですよ😳

それだと膨大過ぎますね。

>因みに『条件を指定して選別していく方法』は具体的にはどんな方法になるんですかね?

>2、AさんとBさんは『へ』と『と』の勤務はやらない
>3、GさんとHさんは『い』と『ろ』の勤務はやらない

単純に
●Aさんが『へ』の場合→NG
●Aさんが『と』の場合→NG
●Bさんが『へ』の場合→NG
●Bさんが『と』の場合→NG
●Gさんが『い』の場合→NG
●Gさんが『ろ』の場合→NG
●Hさんが『い』の場合→NG
●Hさんが『ろ』の場合→NG
とNG判定します。
●1セルでNG判定しても良いし、1つずつ判定して1つでもNG判定があればNG

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

●単純に1ヶ月なら30パターン必要なところを
●(条件無しの)勤務表を3,000通り(1万通り?)くらいランダムに作成して
●NG判定して残ったOKパターン(10%くらいはOKパターンとの想定)を
●日付毎にランダムに割り振ると言うのも良いかも?
●さらに勤務形態の回数範囲(上限・下限)を判定しておいて
●エラーなら手動更新(F9?)して良いパターンになったのを決定すると理想に近くなるかも?

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>問題は、複数の条件に対して作成する関数が干渉するて事。

>無条件で排他処理をやってくれるのかと勘違いしてましたがそんな便利な機能はさすがに無いですね。

どういう意味なんでしょう。
干渉とは?排他処理とは?
みんなが答えを出してるんだけど、相変らず何かが解決していない、という事はどんな式を書いて、どんな問題に行き詰まっているのでしょう?
ドライブなどにアップして公開して頂く事は可能ですか?

>『除外した人以外を対象にして抽選してくれる』と思ってましたが、そんな便利な事はさすがに無い

とはどういう状態なんでしょうか?文章ではよくわからないので。

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>実際の勤務者は17人です。かつ、勤務形態が21通り

本文では、『重複なく漏れなく』と書いてあり、勤務者よりも勤務形態の方が少ない画像でした。
実際は、勤務形態よりも人数の方が少ないので、「漏れなく」の条件を満たす事ができません。
実際には、1人で2つの勤務形態を掛け持ちしたりするのでしょうか?
関係ないですが、
ある範囲で、0ではない最初の数字を見つけるときに、どうすればよいかを聴いていたら、

=MATCH(TRUE, INDEX(A1:A10<>0, 0), 0)

と言っていました。こんな(A1:A10<>0)使い方あるんですね。

--- 説明 ---
1. A1:A10<>0:
これは、範囲 A1:A10 の各セルが0でないかどうかをチェックします。
結果として、TRUE または FALSE の配列が返されます。例えば、A1:A10 が {0, 2, 0, 3, 0, 0, 4, 0, 0, 5} の場合、結果は {FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE} となります。

2.INDEX(A1:A10<>0, 0):
INDEX関数は、配列全体を返すために使用されます。ここでの 0 は、行または列の指定がないことを意味します。
結果として、{FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE} の配列が返されます。

3.MATCH(TRUE, INDEX(A1:A10<>0, 0), 0):
MATCH関数は、配列内で TRUE が最初に出現する位置を検索します。
例えば、{FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE} の配列では、最初の TRUE は2番目の位置にあります。

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>〉〉漏れなしにするだけなら、出てきた数値で振られていない勤務形態に振ればよいのでは?
>それだと重複が出ませんかね?

振られていない勤務形態を振ると、重複するとはどういう状態でしょうか?
振られていない物を振れば、絶対に重複しないはずです。
EXCELの実際の式を見せて頂けませんか?
何に困っておられるのかがわからない為。

>> アッカリ〜ン@_@….,….,…😅 さん

BINGで聞いたらこんな凄い技を教えてくれるんですか?すごーい。私も試してみます。
関数で1つ1つ決めていく場合、決めていく順番を決めなければなりません。それで今までは、(ソートしたにせよ)上から決めていたのですが、途中まで決めたところで、選択肢が1つになったものが現れたら、それを優先して決めなければなりません。

そこで、考え方を変えて、1番目を決める、2番目を決める、というようにして、選択肢が1つのものがあれば、それを1番目にして、なければ、任意のもの、次に2番目を決めるときに、一番目に決めたものを各選択肢から除去して、また選択肢の数を調べ1つのものがあればそれを、なければまだ決まっていない任意のものどれか、というように順に決めていけばいいのですが、

循環参照しないために、1個目、2個目と、人数分の選択肢をセルを作る必要があります。

ちょっと書きかけて、うまくいきそう‥となっていたのですが、
一番面倒なのは、n個目の決定の選択肢から、n+1個目の選択肢を作るときに、1~n個目で決まった値を、それぞれの選択肢から除去してやらなくてはならず、そこが異様に大変なため、ちょっとやめました。

セルに分解して、1個目を除去した結果、2個目を除去した結果、みたいにセルに入れておけばいいのですが、5番目となると4つ分それが出てきて、それがA~Eそれぞれに必要なので、ほんと大変です。

>> さと さん

そうですよね
私の脳内の話してましま(笑)

提示した条件の他にも、まだ条件があり、とりあえず、『固定』の勤務があります。そこだけは別に表を作って手入れし、それを反映させるように組み込んでます

この時
既に勤務が確定してるセルに関しては、それを除いたセルを対象にしてランダム抽出してくれる、と勝ってに思いこんでましたがそれはなく
 ランダム抽出する→そのセルは別表の勤務を反映しているのでそちらを優先する 
その結果、抽出した値は反映されない為、漏れが出てくる
というのが現状です

多分、文章じゃ伝わらんですよね

とりあえず、エラー発生しないので式の形式は間違ってないようですが、目的は達成できません

ホントは、作成中のをお見せしたいのですが、個人名をアルファベットとかにテキトーに変更せんといかんので
 時間あればかここか、直接メッセージにてお見せします

スクリーンショット_2024-09-20_001017.png

>> アッカリ〜ン@_@….,….,…😅 さん

上記コメントで除去するものが増えていく、と書いていましたが、実際は、1つ決めるときに直前に決まったものは消していき、それを次に引き継ぐので、除去するものは毎回1つでした。

図のシートは、1個ずつ決めるようになっていて、
どれを決めるかは、選択肢の数が1のものがあればそれ、無ければ、0以外のもの。決まったものは、空白にして、選択肢の数は0にしてます。
対象位置は、今決めようとしているのが上から何番目かということ。
決定メンバーはそれをA~Eに置き換えているだけ。
選択肢は、決定メンバーが現時点で持っている選択肢。
決定値は、乱数で決めた選択肢のうちの1つ。

大変だけど、数式だとセルに何か値を入れる度に変わるのでちょっと面白いですね。

スクリーンショット_2024-09-20_003554.png

>> アッカリ〜ン@_@….,….,…😅 さん

完璧!と思って、適当に再計算していたら、NGパターンを発見。
上はOKだけど、下がNG。選択肢の初期値は同じです。

2個目の決定で、Aを決めに行くところまでは同じなのですが、そこで、「い」を選んでしまうと、B、Cは、「う」しか選べなくなるため、今のアルゴリズムでは、3個目の決定で最初に見つかった選択肢1個のものを決めに行き、Cの選択肢がなくなってしまいます。

まぁ、3個目でDを決めにいってもダメなので、結局、2個目のAの決定で、「い」を選んだらダメということですね。
でも、そんなの最後までやってみないと分からないです。

ということで、VBAでも全通りやるつもりじゃないと、分からない気がします。1つでもOKが見つかれば、そこで終了でいいと思いますが。

しかし、適当に入れていて、すぐにこんなバグが見つかるとは、なんという偶然‥(^_^;)

>> アッカリ〜ン@_@….,….,…😅 さん

いや、選択肢、1がないときは、一番小さい値から決めていけば大丈夫なのか?本当か??
Bing Copilot 、かしこ過ぎ!

---
0、1ではない最も小さい値のセルを探す方法はありますか?
Copilot
回答を生成しています…

Copilot が送信しました:
はい、0や1を除いた最も小さい値を探すには、MINIFS関数を使うと便利です。この関数を使うと、特定の条件に基づいて最小値を求めることができます。

例えば、範囲がA1からA10の場合、次のように入力します:

=MINIFS(A1:A10, A1:A10, "<>0", A1:A10, "<>1")

この関数は、範囲A1:A10の中で0と1以外の最小値を返します。

>> アッカリ〜ン@_@….,….,…😅 さん

私の読み違いだったらごめんなさい。
毎回選択肢が少ない方から順に決める方が、大丈夫になる確率は高くなるでしょうけど、絶対は無いですよね。

最初から無理なNG勤務形態が設定されている場合は、何してもダメですし。
上手く割り振れるパターンがわずかしか無い設定の場合、そもそもランダム割り当てをする意義は無いですよね。
パターンが少なければ、数パターンを繰り返せば良いという事になるので(上に出た案のように)。

ですので、関数としては、「どんな勤務形態希望も許す」のは無理で、「ベストを尽くす」だけで良いように思うのですが…

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

既に確定した勤務を「除く」処理が上手く作れないのですね。

知恵袋の回答のように、列「勤務形態」「乱数」の2列で、勤務形態数の種類が21行の表から、選択する仕組みで作られているのですよね?

その表から、他人が選択済みの勤務形態行を除く必要がありますよね。一例としてFILTER関数などで行を除いて行く事ができます。
計算の仕方(=重複を除く)が決まっているので、次にどういう式で実現するか、という問題ですね。

これは記述式を書いて貰えたら、具体的にどこを直すか皆さんアドバイスできると思います。例えばFILTER関数の入れ子にしたら良いとか、別セルに除外済み表を一時作成するとか。

それが出来るなら、次の問題は、誰から先に除いていくかの問題(あっかりーんさん試行中)ですね。こちらは計算の仕方自体をどうするか(=誰から除くか)検討中という状態で、式の記述方法の前段階。


>『固定』の勤務

固定は、特定の勤務をやらない人と同じ仕組みを使って実現できると思うのですが、いかがでしょうか。
「AさんとBさんは『へ』と『と』の勤務はやらない」と同じ感じで
「Cさんは『い』~『へ』までやらない」つまり「『と』固定」という設定にすれば実現できそうです。
ちなみに( ˘・з・)チェッ@君の💜にRev.🎵さんのEXCELのバージョンは何でしょうか?
スピルが使えるかどうか、などなどバージョンによってかなり違うみたいなので。

スクリーンショット_2024-09-20_102525.png

>> さと さん

選択肢が1つのもの、それがないときは、選択肢がもっとも少ないもの、を優先して決めていけば、前に書いた不具合は起きなくなりました。

セルを変更するだけで、すぐ反映されるのは楽しいですが、人数を増やしたり、条件を増やしたりするときに、変更が大変過ぎるので、セルの関数でやるのは、やはりお勧めできないですね。

>> アッカリ〜ン@_@….,….,…😅 さん

あ~お が選択肢で、
A:あい
B:いう
C:うえ
D:えお
E:おあ

これも大丈夫そうです。仮に、1個目の決定だけを、A以外に振ってみても、答えは2通りでした。

関数でやるのは、実際に使うというよりは、アルゴリズムを確認する目的、と言った感じでしょうか。
【メンテする上で簡単でシンプルは最重要→複雑だと自分でもメンテ困難】
●1日の勤務パターンを決定するのに最大勤務者の人数分=17回作業列が必要(つまり最大17倍)
●(NGパターンも含めて)ランダムな勤務パターンを多めに作成して(NGパターンを排除した)「OK判定パターン」のみ割り当てる。
→「勤務表テーブル」方式?
(誰かが言ってた?→過去のパターンを流用→勤務者が変わったら過去のパターンが使えるか問題)

ちなみに
・「OK判定パターン」だけを最後にソートする必要は無く、
・(NG判定パターンを飛ばして)「OK判定パターン」のみの通し番号をナンバリングすれば(手動操作を挟まず)自動更新可能。

>> アッカリ〜ン@_@….,….,…😅 さん

>選択肢が1つのもの、それがないときは、選択肢がもっとも少ないもの、を優先して決めていけば、前に書いた不具合は起きなくなりました。

>関数でやるのは、実際に使うというよりは、アルゴリズムを確認する目的、と言った感じでしょうか。

なるほど。
では、その仕様を、EXCELシート関数でどう実現するのが良いかを考えてみます。

スクリーンショット_2024-09-20_141414.png

>> さと さん

次に、誰の値を決めるかは、こんな感じで、
選択肢(文字数)が1、そうでなければ、0、1以外の最小の最初に見つかったセル、としていますが、

結局、0以外の最小のセルでよさそうです。

スクリーンショット_2024-09-20_142108.png

ちょっと面倒なのは、この辺ですかね。

・1つ前に決まっていれば、選択肢を空にする
・そうでなければ、1つ前に決まった値を1つ前の選択肢から探し、見つかったら除去して、それを選択肢とする
・見つからなかったら、1つ前の選択肢をそのまま今回の選択肢とする

>> アッカリ〜ン@_@….,….,…😅 さん

●式(関数)はシンプル(なるべく簡単な式)にした方が良いです。

>結局、0以外の最小のセルでよさそうです。

【改善前】
J7=IFERROR(MATCH(1,J2:J6,0),MATCH(MINIFS(J2:J6,J2:J6,"<>0",J2:J6,"<>1"),J2:J6,0))
→式の文字数=79文字
→複雑な式になりすぎている。

【改善後(たぶん合ってるハズ)】
●文字数が0の時は99とする。
J2=IF(LEN(A1)=0,99,LEN(A1))
→(作業セルの場合、式をシンプルにするためには)実際の文字数にする必要は無い
→このちょっとした工夫だけで大きな違いが出る(たったこれだけ)
→たぶんこの程度のテクニックは初心者の内にどこかで出て来なかった?(習うなり読むなり)
●文字数最小のセルの抽出
J7=MATCH(MIN(J2:J6),J2:J6,0)
→式の文字数=26文字
→式がシンプルになる
→(短い式で初心者にも理解出来る関数なので)メンテしやすい
→(関数が減るので)PCの負荷も減る?
→(式が多くなった場合、ちょっとした工夫で)計算速度が早くなる?

●他にも難しくしている(考えている)式は有りませんか?
いろいろ考えて頂きありがとうございます(^_-)-☆

個別のレスの時間ありませんので

根本的ではないですが、思いついた解決策として

二段階で作成してみたら、と

固定勤務と休日を反映させたあと、勤務を振り分けます。この時、特定の勤務でなく単に『勤務』とだけ振り分けます。

それを更に別の表に反映させて、『勤務』のセルにだけ関数を作成してみようかと

こうすれば漏れなく重複なく、は回避できるのかも、と
考えていたんですが、このやり方でも、そもそも『勤務』を振り分ける時点で漏れが発生して勤務人数が足りてない現象が発生するて事に気づきました😂

 結局、問題は、固定勤務と休日の人を除いて人で勤務を漏れなく重複なく振り分けるにはどーするかなのに😭

 アナログな解決策として
固定勤務と休日だけ、関数でなく『手打ち』で入力したらどうなの?て考えました。

固定勤務は毎日同じ人数なので、アリですが、休みは日によって人数違うので結局、振り分けを行う対象人数が毎日違い、休みの人の部分でまた漏れが発生するやん、て気づいて。というか実際組んでみてそーなりましたね😰
 人数を毎行確認して一番上のセルだけ抽選範囲を毎行変更して振り分ける・・・そんな手前のかかる事できないよ(笑)もはや自動ではない

理論的には可能でも現実的ではないのかな
_| ̄|○

>> blue777 さん

J7は、1かどうかのMATCH()はいらないですね。0以外の最小かどうかで十分。

0のときに、99とすると、J7の式は短くなりますが、99というマジックナンバーが気になるところですね。あと、99としたのを忘れて変な動作をしないように、99文字以上を入れないようにするチェックを入れないといけないとか。

全部、ひとりでやっていれば、分かっているので問題ないですけどね。それでも、半年経つと全部忘れたりしてますが…
私は趣味でやっているだけですので、式とかも動けばいいって感じです。(^_^;)

>> さと さん

2021 MSO
(バージョン 2309 ビルド 16.0.16827.20166) 64ビット
です)

スクリーンショット_2024-09-20_164938.png

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

5人、1日分だとこんな感じですね。
VBAでやると、右の1個目決定、2個目決定というのをループで回していく感じで、その時の値は変数とかに入っているので、わざわざシートに表示する必要はなくなります。

全然別な疑問として、ある人について、同じ勤務形態(い・ろ・は‥)が連日続いてもいいのか?とかが気になりました。そもそもこの勤務形態って、勤務地?勤務時間帯?みたいなもんですかね?

でも、そうだすると、担当者が割り当てられていない勤務形態があるとまずいような気が‥。

スクリーンショット_2024-09-20_170401.png

固定勤務って、こういうことですよね。

例えば、Cの人は、「う」しかやらない。
なので、次は、D、Eの割り当てを決め、
最後に、A、Bの割り当てを決める。

>> アッカリ〜ン@_@….,….,…😅 さん

>99というマジックナンバー

>全部、ひとりでやっていれば、分かっているので問題ないですけどね。それでも、半年経つと全部忘れたりしてますが…

この方法は初心者でも知っている一番簡単で一番効率の良いメジャーな基本テクニックです。
名称は不明なので検索出来ませんが(何て言うんだろう?)。

( ˘・з・)チェッさんが参照した知恵袋でも999を使っています。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12276390257

難しい関数の使い方を覚える前にこの「初心者でも知っている一番簡単で効率的な基本テクニック」をまず覚えましょう(無理にとは言いませんが)。

"<>" の使い方で2人で感動している事にこちらがビックリしました。

>99文字以上を入れないようにするチェックを入れないといけないとか。

●99で足り無いと思うなら
・999でも良いし
・9999でも良いし
・99^99でも良いです。
(何とでもなる)

>> アッカリ〜ン@_@….,….,…😅 さん

そうそう
毎日、固定勤務が2名いるため、それだけは別に手入れしてから勤務表に反映するようネストしてます。

間違いにくいようにそうしてますが、これを入れると、それ以下の条件が非常にネストしにくくなります。
 結果、漏れが出てきます

なので、固定勤務だけは直接手入れして、そのセルだけは関数を無くした方が上手くいきそうな気はします。

ところが他にも問題発生してるのですが、もう文章じゃ説明無理ス(笑)

>> アッカリ〜ン@_@….,….,…😅 さん

特定の勤務の偏りは問題ないです。まずいのは時間の偏りだけ。
 新人や日の浅い人はできる勤務が限られてるため、偏るのは必然なので

因みに、勤務形態は場所と時間の両方が違うために複数です。

〉〉担当者が割り当てられていない勤務形態があるとまずいような気が‥。

・できる人が限られてる勤務
・必ず誰かがしなきゃいけないけど誰でもできる勤務
・誰でも良いけどできる人が限られてる勤務
この3パターンがあるため複数極まりないのです

>> blue777 さん

コメントどーもです。
無視してる訳ではなく、私の知識不足で理解できてないだけです。

ただ、999にしてる意味はなんとなくわかりますよ。要は乱数増やしても修正不要にしてるて事でしょ。つまり大は小を兼ねる理論

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>無視してる訳ではなく

コメント無くてもOKです。
聞きたければ質問下さい。

>要は乱数増やしても修正不要にしてるて事でしょ。つまり大は小を兼ねる理論

知恵袋のは
重複データの2個目以降を除外するための999ですね。

こちらは(0以外の最小値を選ぶのに邪魔だから最初から)0を除外するための99です。

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>まずいのは時間の偏りだけ。

と言う事は、
●「勤務者」に「勤務形態」を割り当てるのでは無く
●必要な順番の「勤務形態」に「勤務者」を割り当てないとダメなのでは?
●「勤務者」がいなくても良い「勤務形態」が有る?

>> アッカリ〜ン@_@….,….,…😅 さん

式見せて頂いてありがとうございます、わかりやすい。
この1日分5人だけの算出方法を、17人の勤務表の形にどうやるかな?とか考えようと思っていました。
勤務形態は、仕事の種類(難易度)の違いという感じなのでしょうか?
時刻は関係無いので、重なりは考慮不要なのですね。

あと、前に書いたように21種類の勤務形態で、17人なので、1日の内に誰もやらない勤務形態が最低4種類は出てきますが、それは問題無いのですね?

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

私もあっかりーんさんも前に書いているのですが、
固定勤務の人は、
出来ない仕事がある人(『へ』と『と』はやらない)
と同じ扱いにしたら特別扱い不要になります。

それとも同じ扱いにできない我々にはわからない条件があるのかな?

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

2021なら色んな関数使えるので自由に組んでみます

>> さと さん

あーそこですね

絶対に必要な勤務は8形態です

残りの形態は、土日祝のみ増えるのと、
時間調整のため、通常はやらない形態をやる時があります
 分かりやすい易く言うと、例えば昼の勤務を更に半分の午前と午後に分ける、とか。
 でもそーゆー形態は頻度が少ないので、時間調整をする時に手入力で対応する予定です。

そう
実は一番の問題は、時間調整だけは自動でできない、という事

合計時間は
勤務形態をSWITCH関数で勤務時間に換算し、休みは0にして別表に反映させ、その合計を出し、その値を勤務表の合計セルに反映させてます。

 ゴールシークが使えりゃ調整は簡単なんですが、あれは数値でしか使えない。しかも勤務時間は決まった時間数なのでそもそも無理😓
 なので、合計時間を見て手入力で調整するしかない┐(´-`)┌
パートとかアルバイトがいて
週4日勤務(週3日休み)の人もいるとか?

>> blue777 さん

居なくても良い形態はないのですが
時間調整のため、例えば1日の勤務を午前と午後に分けたりする事があります。

1日の勤務をAとすると
A/と/Aもある感じ
Aがいれば上の形態は不要。
逆のA/と/Aを作った日はAが不要になる

でもその特殊形態は、時間調整のための形態で頻度が少ないので、調整の時に手入力で入れる予定でした。
 その特殊形態まで組み込むとなると自動作成はほぼ不可能と思います
 他の条件がなければネストできますが、全部を加味すると無理ス

>> ( ˘・з・)チェッ@君の💜にRev.🎵 さん

>時間調整のため、例えば1日の勤務を午前と午後に分けたりする事があります。

●2人で1人分(1日分)と言うことですね?
●つまりは一旦2人を(その日だけの)ペアにすれば自動割振は簡単になりませんか?
(どうペアにするかは考えるとして)

スクリーンショット_2024-09-21_010428.png

AIにソース書いてもらって、数行くらい修正したら、何とか動いているっぽい。途中、バグ入りソースばかりで、投げそうになったけど。(^_^;)

>> blue777 さん

いや、2人で分けるパターンはあくまで時間調整のための手段で基本的には分けません。
 基本は全員に割り振る→その後に時間調整→細かい調整で必要なら2人で分ける
て流れですね。