• 締切済み

エクセルよる数の振り分け・・・

 例えば、ここに郵便配達員が10人いるとします。この10人には、それぞれ配達地区を与え仕事をしてもらうことになった。  ところが、その配達地区は50地区もあり、それぞれ地区ごとで配達数はばらばらです。  結論としては、この10人に"配達数"が平等になるように配達地区を分けたいのです。  そこで今、その地区毎の配達数がエクセルにて集計されています。例えば次のように…  A1     B1     C1 地区番号  地区名  配達数 (1~50)          ~~~~~~~~~~~~~~            A52     B52    C52  空欄    空欄   配達数合計  A53     B53    C53  空欄    空欄   平均配達数(C51/10人)  このような場合において、10人平等に担当地区を振り分ける事ってできるのでしょうか?^_^; もし、よい方法があれば、ぜひそのお知恵をお貸しくださいm(__)m  ちなみに私、関数は得意なのですが…BVAの知識はほとんどありません。  皆さん!ぜひ!ぜひ!よろしくお願いします!! m(__)m

みんなの回答

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.4

その実際のデータ(配達数50件)を教えてほしいのです。 そうでないとソフトの改良する場所が分かりません。 できれば、どういう結果になればいいかも教えてください。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.3

ソフトのバージョンアップです。(結果を教えてください) それから、実際のデータと理想的な振り分け結果を教えてください。 Dim suryo(10) As Integer Dim chiku(10) As String For I = 1 To 10 suryo(I) = suryo(I) + Cells(52 - I, 3) chiku(I) = chiku(I) & " " & Cells(52 - I, 2) Next GYO = 41 Do Until GYO < 2 SAISHO = suryo(1) SI = 1 For I = 1 To 10 If SAISHO > suryo(I) Then SAISHO = suryo(I) SI = I End If Next suryo(SI) = suryo(SI) + Cells(GYO, 3) chiku(SI) = chiku(SI) & " " & Cells(GYO, 2) GYO = GYO - 1 Loop For I = 1 To 10 Cells(I, 4) = suryo(I) Cells(I, 5) = chiku(I) Next

seamonkey
質問者

お礼

やっぱり結果は同じでした… 10人それぞれに、5地区が振り分けられる結果となって、配達数にそれぞればらつきがでてしまいます。 配達地区は50あるのですが、地区毎で配達数にばらつきがあり、1300件だったり、200件だったり、時には3~4件だったりするんです。そして、各々地区の配達数を全部足したものが総配達数であり、それを10人で割った数が1人当たりの平均配達数ということになります。 つまり、1人1人が平均配達数になるように、地区を割り振りたいのです… 例えばA列に地区名、B列に配達数が100,500,420,,, と入っていて、その配達数の合計が20000件です。それを10人で割ると、1人当たり2000件です。 10人それぞれが、約2000件の配達数を持つように、担当地区を振り分けたいのです。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.2

地区を固定しないマクロを作ってみました。 サンプルで動作確認願います。 Dim suryo(10) As Integer Dim chiku(10) As String For i = 2 To 51 allsuryo = allsuryo + Cells(i, 3) Next heikin = allsuryo / 10 For i = 1 To 10 suryo(i) = suryo(i) + Cells(52 - i, 3) chiku(i) = chiku(i) & " " & Cells(52 - i, 2) Next gyo = 41 loop1: i = 10 Do Until suryo(i) < heikin i = i - 1 Loop i2 = i i = 1 Do Until suryo(i) < heikin i = i + 1 Loop i1 = i For i = i2 To i1 Step -1 suryo(i) = suryo(i) + Cells(gyo, 3) chiku(i) = chiku(i) & " " & Cells(gyo, 2) gyo = gyo - 1 If gyo = 1 Then GoTo loop2 Next i = 1 Do Until suryo(i) < heikin i = i + 1 Loop i1 = i i = 10 Do Until suryo(i) < heikin i = i - 1 Loop i2 = i For i = i1 To i2 suryo(i) = suryo(i) + Cells(gyo, 3) chiku(i) = chiku(i) & " " & Cells(gyo, 2) gyo = gyo - 1 If gyo = 1 Then GoTo loop2 Next GoTo loop1 loop2: For i = 1 To 10 Cells(i, 4) = suryo(i) Cells(i, 5) = chiku(i) Next

seamonkey
質問者

お礼

 確かにエラーなしで実行されるのですが、結果として地区数が一人5地区に振り分けられるみたいです。  そのためうまく配達数が、平等(平均)に振り分けられないようです…^^;  生意気言ってすみませんm(__)mやっぱり、この振り分けは簡単ではないんですね(~_~)

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

マクロ(VBA)でやればできます。 どれほど平等にするのでしょうか。 一人当たり5地区固定と考えていいのでしょうか。 それとも固定しないのでしょうか。 5地区固定で配達数でソートされている前提で作ったマクロが下記です。 Dim suryo(10) As Integer Dim chiku(10) As String For i = 1 To 10 suryo(i) = suryo(i) + Cells(52 - i, 3) chiku(i) = chiku(i) & " " & Cells(52 - i, 2) Next For i = 1 To 10 suryo(i) = suryo(i) + Cells(31 + i, 3) chiku(i) = chiku(i) & " " & Cells(31 + i, 2) Next For i = 1 To 10 suryo(i) = suryo(i) + Cells(32 - i, 3) chiku(i) = chiku(i) & " " & Cells(32 - i, 2) Next For i = 1 To 10 suryo(i) = suryo(i) + Cells(11 + i, 3) chiku(i) = chiku(i) & " " & Cells(11 + i, 2) Next For i = 1 To 10 suryo(i) = suryo(i) + Cells(12 - i, 3) chiku(i) = chiku(i) & " " & Cells(12 - i, 2) Next For i = 1 To 10 Cells(i, 4) = suryo(i) Cells(i, 5) = chiku(i) Next

seamonkey
質問者

お礼

うわぁ~ほんとにありがとうございます!!!! ほんとに助かります!! 一人当たり5地区固定ではなくて、あくまでも配達数のみを平等にできればと考えいてます。ですから、一人当たりの地区数は関係ないのです。 もしよろしければ、地区を固定してないVBAを教えて頂けないでしょうか?ぜひ!ぜひ!よろしくお願いします!!

関連するQ&A