Access:前回と同じ値を割り当てない方法

このQ&Aのポイント
  • Access2003を使っていますが、お客様の割り当て方法について困っています。前回と同じ値を割り当てない方法を考えています。
  • 具体的には、1000件のお客様をA~Eの担当者に指定された数で割り当てる必要があります。また、翌月には同じお客様を同じ5人に前回と異なる指定したお客様数で割り当てる必要があります。
  • しかし、ランダムで割り当てる方法では、前回と同じ担当者に割り当てられる可能性があるため、被りを避ける方法を求めています。SQLの記述方法だけでなく、アイディアやアプローチも歓迎です。
回答を見る
  • ベストアンサー

Access:前回と同じ値を割り当てない方法

はじめまして。 Access2003を使っていますが下記2のようなオーダーがきており、うまいやり方が浮かばず困っております。。 <処理内容:例> 1.Access管理している1000件のお客様をA~Eの担当者に指定された数(A:100人、B:500人、C:200人・・・等)で割り当てる。←ここは今もSQLでランダムで割り当ててます 2.翌月同じ1000件を同じ5人に前回と異なる指定したお客様数で割り当てるが、可能な限り同じお客様に前回と同じ担当者が当たらない考慮をする。(※割当比率に偏りがあり、どうしても被る場合は被っても良い) データのイメージはこのような感じです。 ------------------------------------------------- お客様番号 前回担当者  今回担当者(欲しい値) 0000000   A         B~Eの誰か 0000001   B         AorC~Eの誰か ------------------------------------------------- 営業先の担当決め作業で今まで上記1のランダムで割り当ててたのですが、2の条件が追加しようとしても、どうしても被る場合の考慮などがうまくいかず困っています。。 SQLの記述までなくても、何か良いアイディアレベルでも結構です。 皆さまのお知恵を頂ければ助かります。

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

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

>A~Eそれぞれ毎月上限の件数(≒勤務時間)が決まってるんです。。 今はお客様があって担当を決めようとしている感じですが、 A~E側を(毎月上限の件数を)基準にして、 それに対応するお客様をランダムで決める考えではどうなのでしょうか。

heita3104
質問者

お礼

おぉっ、逆転の発想ってやつですね!! A~Eに枠を決めておいて、前担当で優先順位つけてお客様を入れ込んでいく・・・。。確かに行けそうな気がします、やってみます! ありがとうございました!

その他の回答 (1)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

とある値をランダムに決めるとかぶってしまうので、 被らないパターンをあらかじめ用意しておいて、 それをランダムに決めるような案は?。 A-B-C-D-E 普通に考えれば5人サイクル、 お客様番号を5で割り余りでもって何番目かを決める。 0000000   A 0000001   B 0000002   C 0000003   D 0000004   E 0000005   A 0000006   B これが次回はこれでない担当になれば良いので 0000000   B 0000001   C 0000002   D 0000003   E 0000004   A 0000005   B 0000006   C 次々回 0000000   C 0000001   D 0000002   E 0000003   A 0000004   B 0000005   C 0000006   D これでは とあるお客様に対応するときの、Aの次はB、Bの次はCと 規則的になってしまうので、 このサイクルもランダムにする。サイクルパターンを作る。 A-B-C-D-E B-C-D-E-A B-A-E-D-C D-C-A-B-E ・・・ 32通りから選ぶ。 B-C-D-E-A-B-A-E-D-C-D-C-A・・・・・・・ A-B-E-B-D-E-D-C-A-B-A-B-E・・・・・・・ ・・・・・・・・ 長いスパンで考えたタイプにしても良い。 【お客様に対する対応履歴】前回担当とは違う人にする 0000000の前回担当をふまえて、かぶらないように、次回に対応する担当者選びに使う 【担当者に対する対応履歴】最も対応していない人を次回担当にする 0000000の担当をふまえて、かぶらないように、0000001に対応する担当者選びに使う A 12/17担当あり サイクルパターンA01 B 12/10担当あり サイクルパターンB05 C 10/11担当あり サイクルパターンC04  → 最も対応していない人 D 11/20担当あり サイクルパターンD02 E 12/03担当あり サイクルパターンE03 いろんな担当パターンを用意して、シフトするのが良いと思います。 5で割って余り、というのは一例です。 たくさん候補を用意しての決め方は何でもいいです。 曜日(月~金)で決めてもいいです。 四半期、半年、1年、2年とか一定期間が過ぎたら構成をシャフルする、 でいいと思います。 システムで決めたら一応被っていないかチェックする。 長期予定表をプリントする。 システム化して単純に行うと規則性に偏って、 例外時に対応しきれないかもしれません。 5人を一時的に4人とか微調整可能があってもいいと思います。

heita3104
質問者

補足

丁寧なご回答ありがとうございます! なるほど、、事前に想定パターンを何個か作る方法ですか。 ただ、A~Eそれぞれ毎月上限の件数(≒勤務時間)が決まってるんです。。 A:前月100件⇒今月300件 B:前月800件⇒今月50件 C:前月100件⇒今月450件 なので上記の場合人間が考えると100%重複しないパターンも決めれますが、固定パターン化してしまうと帳尻があわなくなったりしまい困っています。 やっぱり可能な限り、といのは難しいでしょうか・・・(汗)

関連するQ&A

  • 【Access初心者】最大値と次に大きい値の合計

    お世話になります。 Accessで次のテーブルがあります。 テーブル1は半期ごとに更新されフィールドが追加されます。 テーブル1 年度   数  コード 97上   2    A 97下   1    A 96上   8    A 97上   5    B 97下   6    B 96上   3    B (以下500,000レコードぐらいあります) テーブル1をクロス集計します。 コード  97上  97下 96上   合計  97上+97下 A   2     1    8     11       3  B      5     6    3     14       11 (以下つづきます) テープル1は半期ごとに更新されるので【97上+97下】のところのフィールドを手で修正しています。 関数やSQLなどで出来る良い方法はないでしょうか。 サブクエリというのもあると聞いたのでが・・・ Accessは2003です。よろしくお願いします。

  • Accessで前回発注分だけ抜き出すクエリは

    お世話になっております。 Accessで発注テーブルから、前回の発注分のレコードだけ を抜き出すクエリがあれば教えてください。 発注テーブルの構成としては 商品コード 発注数 発注日 A-1     15    2014/07/05 A-1     10    2014/07/10 A-2     25    2014/07/12 B-3    30 2014/07/14 B-3     30    2014/07/18 という構成になっており、この場合、 A-1の2014/07/10の発注分 A-2の2014/07/12の発注分 B-3の2014/07/18の発注分 をクエリで抜き出したいと思います。 当方SQL文とモジュールが使えませんので クエリのデザインビューでの方法をご教授 いただけますとありがたいです。 どうぞよろしくお願いいたします。

  • 数字表示

    指定した範囲の数をランダムに表示してくれるソフトウェア等はありませんか? 問題集をランダムに解きたいのですが自力でやっていてはどうしても偏りが出ているような気がするのでそれをなんとかできれば・・・。と考えているのですが・・。

  • Access95→Access2003にしたら不具合が・・・

    Access95→Access2003にバージョンアップしました。 所々修正はしましたが、わからない点があります。 約5000件のデータがあります。検索条件に一致するデータだけを印刷しますが、例えば「五十音順」にすると 途中までが五十音順で その後はランダム(あ・い・う・え・お・か・き・お・く等)になります。 3回位繰り返しますと、正確に「五十音順」になりました。 1回で、ソートしたいのですが どうしたら良いかアドバイスをお願いします。 WkSql=INSERT INTO 印刷作業用テーブル SELECT * FROM 会員情報テーブル WHERE リスト表示=FASE AND (IIF(会員種別=NULL,'',会員種別) BETWEEN '01' AND '01')AND (退会フラグ=false) ORDER BY フリガナ '作業用テーブル作成 =============================================>> Set データベース = CurrentDb Set SQLステートメント = データベース.CreateQueryDef("") 'まず、作業テーブルをDELETEする。 SQLステートメント.SQL = "DELETE FROM 印刷作業用テーブル;" SQLステートメント.Execute dbFailOnError 'ERROR時、Rollbackする指定。 '続けて、データ抽出&作業テーブル作成。 SQLステートメント.SQL = WkSql & ";" '末尾にセミコロンを付ける。 SQLステートメント.Execute dbFailOnError 'ERROR時、Rollbackする指定。 Set データベース = Nothing 作業用テーブル作成 = 0

  • Excel ランダムに1立て

    指定した範囲にランダムに1立てをしたいです。 A1:E5と指定したら   A B C D E 1   1 2 1 3      1 4 1 5        1 としたいです。横行には1は1つしか立てません。 こういうことはマクロできますでしょうか。 やり方を教えてください。よろしくお願いします。

  • Access昇順レコードを、5分割する方法

    Accessで次のようなテーブルを、身長の高い順に5つに分け、グループ名を つける方法を教えてください。 名前は、重複がありません。身長は重複があります。 同じ身長の場合も、単純に上からグループ分けします。 レコード数は可変です。 (出力イメージ)       名前    | 身長 |  グループ A    | 176 |  G1 B    | 175 |  G1 C    | 174 |  G1 D    | 173 |  G1  E    | 173 |  G2    ・    ・    ・ よろしくお願いします。

  • Access クエリについて

    Accessのテーブル1に、フィールド「コード」「回数」があり、レコードとして A,32 B,20 C,13 ・・・というように、ランダムなコードと回数がセットされているとします。コードは主キーです。 このテーブル1を元にしたクエリで A,1 A,2 A,3 ・・・ A,32 B,1 B,2 ・・・ B,20 C,1 C,2 ・・・ C,13 というように、コードごとに「回数」と同じ数のレコードがクエリ上に生成されるようにしたいのですが、こういうことは出来るのでしょうか?出来ればSQLで回答いただけないでしょうか。

  • 前回に引き続きパズルの問題です

    B--------C Ca9--b5---a9- ---------- --------c5- ----AA---- -e5--AA---- ---------- -a9-----d5a9- c7b7-------B E--------D と ---------- -a9------a9- --b5------- ---CA---c9- ---AB----- -----BA--- -c9---AC--- -------b5-- -a9------a9- ---------- 小文字は1マス分のブロックだと思ってください。小文字の添え字の数はその小文字を押した時何マス分真っ直ぐ進むか、というのを表しています。 たとえばb5ならbを押した時、5マス分だけ真っ直ぐ進むということです。 ただし障害物にぶつかった時点でその動きはとまります。 最終的に全ての小文字をa→A、b→B、c→C・・・と大文字の上にのせるパズルです。たとえばc5,c7はどのC上に一致させてもかまいません。 大文字は床に書いてある感じです。なので小文字がぴったりとその上で止まるようにしなければなりません。 あとひとつ大事なことは、このパズル上にもうけられた「人」がいて、その「人」が小文字を押すことで小文字を移動できます。なのでたとえば ---- -dc- ---- のcを右に押すことはできません。同様に、dを左に押すこともできません。 前回にも質問させていただき、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=580029 の方に詳しい説明を書いたのでそっちの方も見てみてください。 よろしくおねがいしますm(_ _)m

  • MS-ACCESS 教えてください。

    X、Y、Zと3つとも同じ内容のテーブルがあります。 (同じフィールド内容でX、Y、Zという「商品名」が ついたテーブルです。) 1)5つフィールドがあり、それぞれ商品番号(a) 顧客番号(b)、顧客名(c)、商品販売数(d)、 商品販売金額(e)という全く同じ内容です。 (b)と(c)は1対1の関係ですが、X、Y、Z 以外にテーブルはありません。 2)私が今回皆様のお知恵を借りたい内容は、 X,Y,Zのそれぞれのテーブルから (b)=(c)の顧客ごとに3つのテーブルを まとめて集計したいのです。 具体的には、例えばM社((b)のフィールドのみの 表示でOK)ではX、Y,Z((a)というフィールドの 内容で判別)それぞれの商品販売数(d)や販売金額(e)が いくらあって、その合計金額は、いくらですというレポートを 会社ごとにつくりたいのですが、私にはACCESSSが 難しくてわかりません。ちなみに社数はこのデータベースを テスト的に作っていますので、10社ほどです。  (1) (d)、(e)は1つのクエリーで同時に 出そうとは考えていません。同時にできれば 満足ですが、実際に作業は簡便に行えればと思って いるので、VBAを使ってどうの。。。という 高度な作業はする自信がありませんのでレポート自体が (d)(e)2枚になっても全く不満はありません。  (2) EXCELでは3つのテープルを1つにして、 フィルターをかければ1社ごとにできましたが、 ACCESSでこの作業を10社いっぺんに行って みたいので、お時間があるかたはご教示していただければ 幸いです。 よろしくお願いいたします。

  • 別の表を参照して値を取得する

    Aの列にランダムで順に増えていく数字が 10個、あります。 Bの列には10から1までの数字があります。 Dの列にある数字を入れて その隣のEの列に、Aの列のどこの範囲に あたるかを調べて、Bの列の数字を 表示させる方法をお願いします。 _A _B _D _E 03 10 28 01 05 09 27 01 08 08 26 01 09 07 25 01 11 06 24 02 14 05 23 02 17 04 10 06 20 03 03 10 24 02 11 06 28 01 12 05

専門家に質問してみよう