ChatGPTにエクセルのソルバーを使って3交代制シフト表を作る方法を聞く

2023年3月14日火曜日

AI

t f B! P L




エクセルの関数、マクロを知らない初心者


3交代制のシフト表を作る事になり、メンバーの休み希望と出勤希望日をシフト表に反映させようとすると、シフト表作成難易度が跳ね上がる事を知りました。

具体的には、ほぼ1日をシフト表作成に費やし、ようやく完成するレベルの難易度です。

手作業でパズルを埋めるような作業で、自動化出来ないのかと思ったのですが、そのためのスキルが全くありません。

ネット上にあるマクロ付きエクセルは、昨今のセキュリティ事情で動作させる事が出来ませんし、自分で作ってみようにも具体的な手順は見つかりませんでした。

分かった事は以下の二つ。
・エクセルにソルバーのアドインをインストールする。
・制約条件を作ってソルバーの機能で分析(自動計算)させる。

しかし具体的な制約条件の作り方は分からず、自分で考える必要があるようです。

いっそのことChatGPTにシフト表を作ってもらおうと、条件を設けて色々と聞いてみましたがうまく出来ませんでした。
休みを二日連続に設定してくれなかったり、夜勤の次に日勤で働かせようとしたりと・・・
ChatGPTにシフト表を作ってもらおう

ChatGPTにソルバーの使い方を教わる

ChatGPTにシフト表自体を作成してもらう事は諦め、エクセルのソルバーの使い方を教えてもらう事にしました。

ソルバーの使い方1


Q
エクセルのソルバーを使って3交代制のシフト表を作りたいのですが、どのように作ったらよいでしょうか

A

エクセルのソルバーを使って3交代制のシフト表を作るためには、以下の手順を実行する必要があります。

  1. シフト表のレイアウトを作成する まずは、シフト表のレイアウトを作成します。これには、スタッフの名前を並べた行、日付を並べた列、そして各セルにはシフトの種類を入力する必要があります。

  2. シフトの種類を定義する シフトの種類を定義することで、ソルバーが解くべき問題の制約条件を作成します。例えば、朝勤と夜勤を1日に同時に割り当てることはできないという制約条件を定義することができます。

  3. ソルバーを設定する エクセルのソルバーを使用するためには、まずはソルバーを有効にする必要があります。その上で、最適化の目的関数、制約条件、変数の範囲、そして初期解の設定を行います。

  4. ソルバーを実行する 最後に、設定したソルバーを実行します。ソルバーが最適な解を見つけた場合、シフト表が自動的に作成されます。

以上の手順で、エクセルのソルバーを使って3交代制のシフト表を作成することができます。ただし、ソルバーは最適解を見つけるために多くの計算を必要とするため、大規模なシフト表の場合は計算時間がかかる可能性があります。


次に具体的な制約条件の作り方を聞いてみます。


Q

制約条件の作り方を教えてください

A

制約条件は、ソルバーが最適な解を見つける際に必要な条件を設定するためのものです。以下に、3交代制のシフト表における制約条件の例を示します。

  1. 1人のスタッフが同じ種類のシフトを2日連続で担当しないようにする制約条件 この制約条件を作成するためには、各スタッフが同じ種類のシフトを2日連続で担当していないかどうかをチェックする必要があります。具体的には、以下の式を使用します。 =IF(AND(B2=B1,B2=B3),"NG","OK")

この式では、B2にはスタッフの名前が入力されており、B1には1日前のスタッフの名前、B3には1日後のスタッフの名前が入力されています。AND関数は、2つの条件が両方とも真の場合にTRUEを返し、それ以外の場合にFALSEを返します。したがって、スタッフが同じ種類のシフトを2日連続で担当している場合には"NG"、そうでない場合には"OK"が表示されます。

  1. 各スタッフが同じ種類のシフトを3日以上連続で担当しないようにする制約条件 この制約条件を作成するためには、各スタッフが同じ種類のシフトを3日以上連続で担当していないかどうかをチェックする必要があります。具体的には、以下の式を使用します。 =IF(AND(B2=B1,B3=B2,B2=B4),"NG","OK")

この式では、B4には2日後のスタッフの名前が入力されています。AND関数は、3つの条件がすべて真の場合にTRUEを返します。したがって、スタッフが同じ種類のシフトを3日以上連続で担当している場合には"NG"、そうでない場合には"OK"が表示されます。

  1. 各種類のシフトが均等に割り当てられるようにする制約条件 この制約条件を作成するためには、各種類のシフトが均等に割り当てられるようにする必要があります。具体的には、各種類のシフトが割り当てられた回数を数え、その差が最小になるようにする制約条件を作成します。以下の例では、朝勤、夜勤、休みの3種類のシフトがあ

途中で回答が止まってしまいました。
ChatGPTは回答途中で力尽きることがしばしばあり、再度問います。

Q

各種類のシフトが均等に割り当てられるようにする制約条件について回答が途中で止まっています。最後まで教えてください

A

申し訳ありません。以下に、各種類のシフトが均等に割り当てられるようにする制約条件を完成させた例を示します。

この例では、朝勤、夜勤、休みの3種類のシフトがあり、それぞれの割り当て回数が均等になるようにします。

  1. 朝勤の割り当て回数を数えるために、COUNTIF関数を使用します。具体的には、以下の式を使用します。 =COUNTIF($C$2:$H$7,"朝")

この式では、C2からH7までのセル範囲にある値が"朝"と一致する場合に数えます。

  1. 夜勤の割り当て回数を数えるために、同様にCOUNTIF関数を使用します。具体的には、以下の式を使用します。 =COUNTIF($C$2:$H$7,"夜")

  2. 休みの割り当て回数を数えるために、以下の式を使用します。 =COUNTIF($C$2:$H$7,"休")

  3. 均等に割り当てるために、各種類のシフトの割り当て回数の差を最小にする必要があります。この制約条件を作成するためには、各種類のシフトの割り当て回数を数えたセルに対して、目標値を設定する必要があります。具体的には、以下の式を使用します。 =ABS(COUNTIF($C$2:$H$7,"朝")-$B$2)

この式では、B2に目標値を入力します。COUNTIF関数で数えた値から目標値を引いた絶対値を求め、その値を最小化するようにソルバーに指示します。夜勤、休みの割り当て回数についても同様に設定します。

以上の制約条件を設定することで、均等なシフト割り当てが可能な3交代制のシフト表を作成することができます。


ソルバーの使い方2

Q

ソルバー機能を使い、シフト表をエクセルが自動で作る手順を示してください。

A

シフト表を作成するために、Excelのソルバー機能を使用する手順は以下の通りです。

  1. まず、シフト表の作成に必要な情報をExcelに入力します。例えば、従業員の名前、勤務可能な曜日と時間帯、シフトの種類(朝番、夜番、休みなど)などです。この情報は、Excelの表形式で整理すると作業がしやすくなります。

  2. 次に、シフト表の各セルに設定する条件を決定します。例えば、ある従業員が1週間に休みを2回以上取得しなければならない場合、ある従業員が同じ曜日に連続して勤務することができない場合などです。

  3. ソルバー機能を有効にするために、Excelの「ファイル」タブから「オプション」を選択します。次に、「アドイン」を選択し、ソルバーを有効にします。

  4. ソルバーを使用してシフト表を作成するには、まず作成したシフト表の全体を選択します。次に、Excelの「データ」タブから「ソルバー」を選択します。

  5. ソルバーダイアログボックスが表示されたら、次のように設定します。

  • 目的関数セルには、作成したシフト表の合計コストまたは合計違反数を設定します。
  • 制約条件を設定します。これには、各従業員が1週間に勤務できる時間、従業員が休日に入る回数、従業員が同じ曜日に連続して勤務することができない回数などが含まれます。
  • オプションで、最適化方法を選択します。これには、どのようにソルバーが問題を解決するかを指定することができます。
  1. 設定が完了したら、「OK」をクリックして、ソルバーが問題を解決するのを待ちます。問題が複雑な場合、ソルバーが解決するまでに時間がかかることがあります。

  2. ソルバーが問題を解決したら、作成されたシフト表がExcelに表示されます。必要に応じて、違反条件を修正するなど、調整を行うことができます。

以上が、Excelのソルバー機能を使用してシ


また止まっていますが以上と記載してあり、これ以上の情報出力は不要と判断して次の質問を行います。


Q

ソルバーを使い、具体的なエクセルの作成方法を教えてください。


シフトの種類は次の4つです

・朝、昼、夜、休

以下の条件があります

・朝の次のシフトには朝、昼、夜、休が設定可能です

・昼の次のシフトには昼、夜、休が設定可能です

・夜の次のシフトには夜、休が設定可能です

・夜のシフトは3日連続まで設定可能です

・休は2日連続で設定可能です

・朝、昼、夜には最低2人シフトに入る必要があります


A

以下は、Excelのソルバー機能を使用してシフト表を自動的に作成する手順の具体例です。

  1. Excelの新しいブックを開きます。

  2. シフト表を作成するためのデータを入力します。例えば、名前、曜日、シフトの種類などの情報を含む表を作成します。以下は、サンプルデータの例です。

名前
Aさん
Bさん
Cさん
Dさん
Eさん
Fさん
  1. シフト表を作成するための目的関数を設定します。ここでは、各従業員がシフトに割り当てられる回数の合計を最小化することを目的とします。セルF2に「従業員数の合計」と入力し、セルF3に「=SUM(B2:B7)」と入力します。

  2. 制約条件を設定します。セルB10に「最低人数制約」と入力し、セルC10に「2」と入力します。これにより、朝、昼、夜には最低2人が割り当てられるように制約が設定されます。

  3. 制約条件をさらに設定します。セルB11に「朝の次のシフト制約」と入力し、セルC11に「1」と入力します。これにより、朝の次のシフトには朝、昼、夜、休のいずれかが設定可能になります。

  4. 制約条件をさらに設定します。セルB12に「昼の次のシフト制約」と入力し、セルC12に「2」と入力します。これにより、昼の次のシフトには昼、夜、休のいずれかが設定可能になります。

  5. 制約条件をさらに設定します。セルB13に「夜の次のシフト制約」と入力し、セルC13に「3」と入力します。これにより、夜の次のシフトには夜または休のいずれかが設定可能になります。また、夜のシフトは3日連続まで設定可能であるため、制約条件として、夜のシフトが3日連続していないことを確認する必要があります。具体的には、セルB14に「夜の連続シフト制約」と入力し、セルC14に「3」と入力します。これにより、夜のシフトは3日連続で設定できないようになります。

  6. 制約条件をさらに設定します。セルB15に「休の連続日数制約」と入力し、セルC15に「2」と入力します。これにより、休は2日連続で設定できるようになります。

  7. ソルバー機能を使用して、シフト表を自動的に作成します。まず、Excelのメニューバーから「ファイル」を選択し、「オプション」をクリックします。その後、「アドイン」を選択し、「ソルバーアドイン」を有効にします。ソルバー機能を有効にしたら、Excelのシート上で、「データ」→「ソルバー」を選択します。

  8. ソルバーの設定を行います。設定画面で、以下のように設定します。

    「変数セル」:各従業員のシフトを表すセル範囲

    「目的関数」:セルF3

    「制約条件」:B10:B15

設定が完了したら、「OK」をクリックし、ソルバーを実行します。ソルバーが最適解を計算し、シフト表を自動的に作成します。結果は、Excelのシート上に表示されます。


という事で、分からない事があればChatGPTに質問を重ねて聞くことで、不明点が洗い出され、作り方がなんとなく見えてきたような感じを受けました。

作れたらいいな






最強のビジネスアプリ「Excel」と超優秀なAIアシスタント「ChatGPT」を組み合わせることで、 数式・関数 / データ処理 / 文章作成 / スキルアップ / マクロ自動化 を効率化し、生産性を劇的に高めながら、これからのAI時代に必要なスキルを身につけることができます。

ブログ内記事を検索

書いてる人

まったりと生きているネットワークエンジニアです。
指先ひとつで基幹ネットワークがダウンさ(トラウマ事例)
サーバー周りは勉強中。
当サイトは、アフィリエイト広告を利用しています

フォロワー

QooQ