• ベストアンサー

EXCELマクロでバイトのポジションを自動的に決めたい

最近EXCELのマクロの勉強を始めました。 同じ時間に20人前後いる飲食アルバイトでその人達の配置を自動的に決めるプログラムを作ろうという試みをしています。ただ、アルゴリズムの構成でどんなのが効率がいいか詰まってます。 ポイントは ・休憩=つまり同じ時間帯にいる人といない人が存在する ・難しいポジションが存在(だれでもできるわけでもないポジションが存在) ・ずっと同じポジションにならないためにある程度ランダム的な要素が必要 と以上のようになってます。 アルゴリズムとして現在やろうとしていることは ・ポジション別スキルを5段階ぐらいに数値化してデータベース化 ・その時間帯にいる人を全員ピックアップ ・難しいポジション順にできる人をピックアップして一定以上のスキルを持っている人のなかからランダムで決めていく このような感じです。 詰まっているところは ・データベースから取り出してきたスキルデータをその時間にいる人というデータといかにつなげるか →時間ごとにワークシートをつくって名前とポジション別スキルデータの二軸の行列をつくっている人は×1いない人は×0で計算するというのを考えましたが、効率悪いような・・・ ・仮にその時間帯にいる人かつそのポジションができる人のデータをつくれたとして、そこから難しい順にポジションを振っていく時にどうやってそのデータを取り出してランダム化するか。 →Rand関数の使い方が分かっていないのかここがよーわかりません。名前とポジション別スキルデータの表からいかに取り出してランダマイズするか。また、できる人たちを上の方法で数値を取り出してもいかに名前とつなげるかなど・・・ よろしくおねがいします。

  • souyan
  • お礼率59% (103/173)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

このコーナーの質問には、ほとんど正解があるものが多い。しかし正解が、出しにくい問題も考えられる。 本質問のように、条件のある、組み合わせ問題は難しいもののひとつと思います。ご存知のように、場合の数が増えて組み合わせの全てをチェックすることができないからです。将棋や碁の対戦などはこのタイプに似ているようにおもう。 知識ベース、推論ベースなども似た困難を抱えている。 ーー 私の思いつきは (1)全てをプログラムの組み合わせで解決しようとせず、人間が総合的に判断して暫定的に良いと決めた組み合わせを作って、テーブル化して、その範囲内で組み合わせを作る、プログラムを作ることを勧めたい。 例えば2者の相性の問題も、2次元テーブル化してチェックすれば、できる理屈だが処理が大変であるので、禁止組み合わせを少数テーブル化するとか。 スキルも工程(時間帯など)の中で、スキルありが1人含まれればよいとか、簡素化できないか考えては。 (2)テーブル化して許容組み合わせを表現する。テーブル化は行きつくところデータベースです。 ランダム化の部分は限られた局面に限定する。 (3)候補組み合わせを少数通り(とおり)毎回出させて、人間の総合的判断のチェックを得て、1つに絞るような考え方をするのはどうかな。ズバリ完成組み合わせを出そうとすると、収収不可能な複雑さになる恐れがある。 (4)繰り返しこのプログラムを実行するとランダムにやっても同じ組み合わせが算出される恐れがある。だから例えば(職位や工程別スキルのような)チーフなどは1度組み合わせに採られたらサインを持ったり、次ぎの候補から抹消して、組み合わせの重複回避などを考えてはどでしょう。 ーー 前もって下記を読んでください。 http://research.nii.ac.jp/~uno/combi_2.htm その上で もうひとつ、この質問を載せるカテゴリの問題なのですが この質問の背景には、数学的素養の裏づけがある回答を得なければならないと思いますが、質問者は、そう思いませんか。 しかしこのオフィスのカテの質問の読者にそういう方でエクセルにも興味がある方がおればよいが、文系プログラマなどは、数学に弱い方がなっている場合も多い。小生は5、6年質問を見ているが、このカテで理数系の質問が出ると、極端に回答が少ないようだ。 もし良い回答が無ければ、理数系のカテに再質問してはどうでしょう。 組み合わせの数も関係するので、場合の数を明示し、質問をもう少し、具体的に(何と何を組みあわせて考えるのか、質問ではメンバー、スキル、従事時間帯などが出ているが、あと受付などで、男女とか、必要管理者とか、チーフなど重複不要とか、禁避組み合わせなど)表現する必要はあると思うが。 ただし理系のコーナーでは、回答があっても、基礎概念が難しく、質問者に理解できない恐れもあるが。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

満足できる勤務管理表を作るのは、かなり難しいことです。 ・時間帯毎の定数を満たす ・各時間帯にチーフが最低○名必要 ・バイト君のスキル管理 ・バイト君たちの出勤予定日の管理(休む予定の管理) ・バイト君どおしの相性(A君とB君は一緒にできない等) など色々と考慮しないと、「とりあえず勤務表は作れたが、実用に耐えない」ことになってしまいます。 まずは既にあるものを使ってみて、使いにくければ改造してみたらいかがでしょうか http://www.vector.co.jp/soft/win95/business/se331132.html http://www.vector.co.jp/soft/win95/business/se356652.html http://members.at.infoseek.co.jp/kenchan_h/index22.html これ以外にも「エクセル 勤務表 作成」で検索すれば色々ヒットします。

関連するQ&A

  • EXCELでマクロを使った検索&自動計算をするには?

    いつもいろんな方に回答いただき大変助かっております。 まずはそのお礼をさせていただきます。ありがとうございます。 さて、本題ですが、 基本データとして「名前」「金額」「とある数値データ」が各々「A列」「B列」「C列」に100件未満が並んでいます。 (例)    A列 B列 C列 1行 あ様 1000  50 2  い様  10   0 ↓  ↓  ↓  ↓ 100  を様 5000 2500  そして別の場所(同じシート内)に「名前」「金額」「とある数値データ」と、同じ内容が書き込めるスペースを作り、ここにデータを入れてマクロを実行すると、既存のデータ(A~C列)の同じ名前の人へ「金額」「とある数値データ」を加算するものを作りたいのです。 (例)【基本データ】    【加算データ】    A列 B列 C列 … F列 G列 H列 I列 1行 あ様 1000  50   名前 金額 数値 ★★ 2  い様  10   0   あ様  10  62 ↓  ↓  ↓  ↓ 100  を様 5000 2500 ←マクロ実行後、5000に10が足される  マクロを実行後は加算データの入力欄(例ではF2:H2)内の数値が消されすぐに次のデータが入力できるように出来れば尚いいです。 また、A列に追加データに入力したF2と同じ名前がなかった場合、I1(★★の部分)に「該当無し」と表示したいのです。 該当がなかった場合は手入力でA列に名前を新しく入力して金額・数値を入力しますので、判定が必要なのです。 このような内容をするにはどうしたらよいのでしょうか? ちなみにマクロの実行は追加欄の近くにオートシェイプなどでボタンを作りクリックすることでマクロを起動させたいと考えています。 乱文かつ長くなりましたが、どなたか指導いただける方よろしくお願い致します。

  • Excelの自動入力

    シート1に、名前、郵便番号、住所、電話番号が書いてあります。(住所録の一覧です) このシートを元に、違うシートで、「1」を入力したら、「1番目の人のデータ(名前、郵便番号、住所、電話番号)」 「2」を入力したら、「2番目の人のデータ(名前、郵便番号、住所、電話番号)」 というように出来ないでしょうか? 実は、香典帳を整理するのですが、住所録の一覧があるので、その中に人で、香典を頂いた人のみをピックアップしたいのです。 こんな事、出来ますでしょうか?

  • エクセル excel 機能 ソート テキスト出力

    表計算のためエクセルの使用を考えています。 エクセルはこれまで使ったことがなく、どのようなものか分からず質問させて頂きます。 セルごとにランダムに入力した数値を小さい順に並べ替えてテキストとして出力する機能はありますでしょうか? 例えば0~100までの数字をセルごとにランダムに入力します。 そのランダムな数字を大きさ順に並べ替えたものを、例えばテキストデータとしてメモ帳などに貼り付ける形で出力させたいです。 このような機能はありますでしょうか? 教えて下さい、宜しくお願いします。

  • エクセル マクロで可能!?

    エクセルで個人データを管理しています。マクロでできるのかわかりませんが、できるなら挑戦してみようと思い質問しました。 データは、縦に個人別に並べてあります。また1人のデータにつき4行を使って横長にその個人のデータを記入しています。よって左端に名前等の基本データが記入されていています。下のような感じです。 (シート1)  名前A データ ××○○○・・・・・・  名前B データ ×○○×○・・・・・・  名前C データ ○○××○・・・・・・   ・   ・ そこで、ある個人のデータの名前周辺部分を別シートにそのまま同じ形式でコピーをしたいのですが、それをマクロでできないのかなと思い質問しました。下のように全ての人をコピーする必要がないので解らなくなっています。 (シート2)  名前A   名前C  名前G   ・   ・ 考えているのはシート1の各名前の前にコマンドボタンを配置し、それに『指定部分をコピーしてシート2に貼り付け』というマクロを組めばいいのでないかと思っています。しかし、全ての個人をコピーする必要がないため、コピー先の場所をどう指定してやればいいのかがわかりません。コピーをした順番に上から順番に埋まってほしいのです。 以上、どなたかわかる方お願いします。 エクセルを文章で状況説明するのは難しいです…

  • エクセルのマクロの組み方に詳しい方

    エクセルのマクロの組み方に詳しい方はいらっしゃいませんか? 今、売り上げの記入を自動化できるようにマクロを組もうと試みています。 しかし、マクロの本を見てもちんぷんかんぷんです 。 頭の中で考えていることですが… まずデータベースとしてエクセル、またはそれに代用できるファイルに手入力で仕入れの詳細を記入していきます。 これは自分で入力していくので問題ありません。 ここからが問題です。 データベースとは別のエクセルにマクロを登録して、データベースから仕入れ情報を検索したいのです。 例えば… A1商品名、A2重量、A3仕入値…というように項目を作っていきます。 そしてB行に検索したい文字、数値を入力します。 そしてボタン1をクリックすると、B 行に入力した値に一致するデータを行ごとD行に呼び出します。 最後にD行の売上の項目に売上を記入して、更新したD行のデータをシート2、又は別のエクセルファイルに張り付けられるようにしたいです。 データの張り付けを文字のあるセルの最後尾の下の空白のセルに張り付けていけるようにしたいです。 どのようなマクロを組むと良いでしょうか?どのような言語を使うと良いでしょうか? 詳しい方是非是非教えて下さい。。

  • Excelで違うファイルのデータを参照する

    EXCELで違うファイルにあるワークシート上のセルを参照することはできるのでしょうか。 巨大データベースから必用なデータをピックアップして表示したいのですが データベースが大きい為、全てを読み込むのに時間がかかります。 データを表示するファイル上に条件を入力すると、データベースの対応するワークシート上のデータを表示できるようにしたいのですが。。。

  • エクセルのデータベース

    個人情報をエクセルでデータベースにしようと思います。 住所や名前等はすべて1:1になるものですが、 1:2以上になるものはどうしたら良いでしょうか? たとえば、資格をたくさん持っている人。 その中で、ある資格を持っている人だけをピックアップしたい場合。 どのように作ったらいいのでしょうか? リストを考えています。

  • サンプリングトレース

    温度の履歴を処理するプログラムを考えているのですが教えてほしい事があります。 <質問> 時間軸とともに0~1000までの数値がランダムに発生したとします。1秒おきにランダムに発生したデータを取り出し、全部の合計の平均値を求めたいのです。 私が考えているのは サンプリング値 + 累計 = 現在までの合計 現在までの合計 ÷ サンプリング回数 = 平均値 上記の計算で平均値が出ると思います。しかし、条件があります。累計を格納する箱が最大32767までしかはいらなかったとしら、サンプリングで1000という大きな値がいくつも入った場合、32回までしかサンプリング出来ません。 何かもっと効率の良いアルゴリズムがあるのでしょうか?

  • エクセルのマクロでこんなことできますか?

    エクセルで毎月のシフト表を作っています。 1.「名前」「開始時刻」「終了時刻」などを入力できるようにしたカレンダーのような表を作成。 2.入力データから、時間数を名前別に集計する。 以上の2つのマクロを作りました。 ここで、1.のカレンダーの表の「名前」は職員の名前だけ入れば良いので、名前の入力欄のセルに入ったら、リストボックスのようなものから選択できるようにできたら使い勝手が良いかな?と思います。 入力ミスを防ぐことと、タイプの手間を省く目的ですが、そういうことってできますか? 何かいい方法がありましたらお教えください。

  • 関数で自動的に並びかえができるようにしたい。

    関数の質問です。別のシートより抽出された100行程度のセル(1列)の中に空白も含めて数値が羅列されています。それを並びかえやオートフィルタを使わずに自動的に数値の若い順(1.3.5・10等)に並びかえることができる関数はないでしょうか。ありそうでなかなかありません。よろしくお願いいたします。 (データ並びかえ等した方がよいとは思うのですが、パソコンをほとんど知らない方もデータ入力等行い資料提出するようにしてますので、データさえ入力すれば別のシートに自動的に並びかえができており、その資料提出だけで済ませたいというのが実情です)

専門家に質問してみよう