[[20190926095742]] 『倉庫にある在庫を2つの拠点に割り振る』(ゆかり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『倉庫にある在庫を2つの拠点に割り振る』(ゆかり)

初めて質問させていただきます。
なるべく詳細を記載しているつもりですが、
情報不足などがありましたらご指摘お願いします。
長い文章で申し訳ございません。

とある倉庫にあるダンボールの在庫<あ〜え>を
大阪行きと東京行きのトラックに振り分ける
※<あ〜え>の違い→サイズ
<積み込み詳細>
・トラックのサイズは幅9600mm
・製品には1列に使用する幅と1列に積める個数が決まっている
・1列の幅のサイズはダンボールにより異なる(一覧表参照)
・積み上げれる数もダンボールにより異なる(一覧表参照)
 例)<あ>の商品の場合は1列に幅1000mmを使用し、1列に20個積める

<積み込みルール>
・積み込み個数は倍数+5個以上は端数でも積み込み可
→<あ>の在庫が25個の場合、→1箇所に全量送りOK
 <あ>の在庫が21個の場合、→1箇所に20個送り、残り1つは倉庫残し
 

<現行手順>
1)F23〜I23、L23〜O23行を手で入力することにより、
 31行の優先順位が表示されるよう関数がくまれている
 (31行のF〜I、L〜Oで1〜8位までの優先順位)
 23行=大阪と東京の現在の在庫数
 F〜I=大阪、L〜O=東京
2)36行のF〜Iに、倉庫より出荷できる<あ〜え>の
 ダンボールの個数を手で入力する
3)48行のF〜I・L〜Oに、?@で表示された優先順位を元に
 ダンボールを振り分ける
例)<あ>の倉庫在庫が40あり、大阪、東京で優先順位が
  1位と3位の場合、20個ずつで分ける
  1位と4位などの場合は大阪に40個送る
 →1種類のダンボールでランキングの上位と下位の差が
  3つ以上ある場合は上位優先し、3つ以下の場合は約半分ずつする
4)49行のF〜I・L〜Oに使用する幅が計算される
5)49行のF〜I・L〜Oの幅合計が、それぞれ9500を
 超えないように個数を入力する
 →トラックの幅が9600のため
※ぴったり9500にならなくてもOK(9000や8500でも可)
 在庫があるなら8000以上にはしたいです。
 在庫が無い場合はあるだけを割り振る
※2 不定期で<お〜し>のダンボールも振分ますが、
  <お〜し>は<あ〜え>より優先されて送られるため、
  先に個数を入力し、そこから<あ〜え>を振り分ける
  →<お〜し>の幅と積み上げ個数は一覧表を参照

ここで教えて頂きたいのは、1)2)+※2の不定期分は手動でおこなった後、
3)〜5)をボタン1つで自動できる方法があるかという事です。
こんな細かいルールのマクロは作れるのでしょうか。
言葉での説明が難しく、解り辛い箇所も多々あるかと思いますが、
ご教授お願いします。
下記に実際使用しているエクセルの表を表示します。
掲示板の横幅に制限があるため、一覧表は上下に分けて表示します。

(種類別1列の積み込み個数&使用幅一覧表)
※実際のエクセルでは列A〜M、行4〜6
種類   あ   い   う   え   お   か   き
個数   20   20   12   12   9    9    20
幅    1,000 1,500 1,000 1,500 1,000 1,500 1,500
種類  く   け   こ   さ   し
個数  20   10   10   12    2
幅   1,500 1,500 1,500 1,000 1,500

列/行  F   G   H   I    L   M   N   O

21    <大阪在庫>         <東京在庫>
22    あ   い   う   え   あ   い   う   え
23    359   271  216  0   334  474  93  197

30    優先              優先
31    8    7   6    1    5    4   3    2

33    <倉庫在庫>
34    現状(個数)
35    あ   い   う   え
36    69   202  13   18

38    不定期搬送(大阪)       不定期搬送(東京)
39    お   か   き   く   お   か   き   く
40(個数)
41(幅) 0   0     0    0    0    0    0    0
42    け   こ   さ   し   け   こ   さ   し
43(個数)
44(幅) 0    0    0    0    0    0    0    0

46    割振(大阪)
47    あ   い   う   え
48    20   40    0   18
49    1,000  3,000  0    3,000  7,000(幅合計)

46    割振(東京)
47    あ   い   う   え
48    49   60    13   0
49    3,000 4,500 2,000  0    9,500(幅合計)

※実際のエクセルでは割振(東京)は大阪と横並びです。
 列L〜Oの行46〜49になります。

上記は1)〜5)を行った実際の結果を表示しています。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 回答ではありません

 「あ」の69 が 大阪20 東京49 に分けられる根拠がわかりません

 優先順位は 大阪 8 東京 5 で ランキング差は3なのですが

 >3つ以上ある場合は上位優先し、3つ以下の場合は約半分ずつする

 といきなり 矛盾する説明です

 おそらく 「積み込みルール」との兼ね合いもあるのでしょうが、

 「実際の結果」の計算手順を書いてみてください

 回答できるかどうかはわかりませんが・・・

(渡辺ひかる) 2019/09/26(木) 16:07


ご指摘ありがとうございます。

実際の結果の算出方法ですが、現在は担当者の長年の経験で
割振りをしているので、記載したルールであれば大阪、東京共に<い>が多く積まれ
<あ>は0でなくてはいけないと思います。

実際の計算では<あ>も少しは送ろうと<い>を抑えた結果、大阪・東京別で順位を見た場合
一番低い<あ>にも割り振られただけとなります。

ですが今回は経験値ではなく、標準化するるため上記で記載させて頂いたルールで
作業ができないかと考えています。

結果を記載してしてしまったた矛盾が生じてしまいすみません。

上記結果では無く、ルール優先でよろしくお願いいたします。

(ゆかり) 2019/09/26(木) 17:07


 ルール優先はわかりました

 >3つ以上ある場合は上位優先し、3つ以下の場合は約半分ずつする

 再掲しますが 3の時はどっちなんですか?

 そして、ルール通りに計算したらどうなるのか

 手順と結果を実際に書いてみてください

 正解がわからないと考えようもありません

(渡辺ひかる) 2019/09/26(木) 17:21


 >・積み込み個数は倍数+5個以上は端数でも積み込み可 
 >→<あ>の在庫が25個の場合、→1箇所に全量送りOK 
 > <あ>の在庫が21個の場合、→1箇所に20個送り、残り1つは倉庫残し 

 このルールがちょっと私には腑に落ちないのですけど、

 幅1000mmで20個積める種類が2種類あり、トラックの残り幅が2000mmしかない場合、

 両者20個ずつ積む方がトラックの効率がいいような気がするんですが、
 あくまで優先順位の高い方を25個積むのが正解なんでしょうか?

 (正解の方がロジックとしては、シンプルではありますけども、やっぱ腑に落ちないです)

(半平太) 2019/09/27(金) 08:43


渡辺ひかる様→

日本語がそもそも変でした。すみません。

2つの場合は約半分ずつし、3つ以上ある場合は上位を優先
1位と3位=半分
1位と4位=1位に全量
こちらでお願いします。

今回の結果としましては

46    割振(大阪)
47    あ   い   う   え
48    0    80   0    18
49    0    6,000  0    3,000  9,000(幅合計)

46    割振(東京)
47    あ   い   う   え
48    0   100   13   0
49    0   7,500  2,000  0    9,500(幅合計)

こうなって欲しいです。

・<え>が大阪と東京で順位差は2ですが、
 在庫が18個しかなくトラックの1列20個縛りがあるため全量大阪へ
・<う>は東京が3位、大阪は6位と差が3のため全量東京へ
・<い>は差が東京4位、大阪7位で3以上ありますが、
 東京を100個載せた時点で使用幅が9500に達したため、残りを大阪へ
・<あ>は大阪のトラックも<い>で9000になり<あ>を載せると幅が10000になり
 オーバーするため積み込み無し

半平太様→

ご指摘があったトラック効率ですが、仰る通りの方法が効率は一番良いです。
私の希望としましては本当は1位〜3位までは
順位を優先し、4位〜8位まではトラック効率を優先したいのですが、
そこまで細かいルールができるか解らず上記で決めてしまった方が
いいかと思いました。

例えば<あ>の荷物が25個で大阪が1位、東京が2位の場合、
大阪=20個
東京=5個
こうしたい為の端数積み込みOKのルールでした。
ですが流石に4個だと効率が悪いので、+5で切ろうとしました。

順位によって順位優先、効率優先に分ける事とかは可能なのでしょうか?

(ゆかり) 2019/09/27(金) 10:03


 >・<え>が大阪と東京で順位差は2ですが、 

 順位差は1ですよね?

 > 在庫が18個しかなくトラックの1列20個縛りがあるため全量大阪へ

 1列20個縛りって?

 ?<う> なんですけど 12個まで 1,000 で 1個増えただけで 2,000とするのは 効率が悪くありませんか?

 こちらで手作業でやってみましたが下記のほうが効率がいいように思います
 ルール違反があれば指摘してください

 46	割振(大阪)				
 47	あ	い	う	え	
 48	0	100	0	9	109
 49	0	7,500	0	1,500	9,000

 46	割振(東京)				
 47	あ	い	う	え	
 48	20	80	12	9	121
 49	1,000	6,000	1,000	1500	9,500

 
(渡辺ひかる) 2019/09/27(金) 11:46


すみません、順位差は1です。
20個縛りという言い方も違いました。
<あ>の場合20個単位で1000幅使用するというだけです。

効率よく割り振って頂いてありがとうございます。
基本はこれでお願いしたいのですが、追加でルールを付けさせてください。

順位の付け方ですが、大阪・東京各拠点にある各ダンボールの在庫数と、
各拠点に最低在庫量として置いておきたい数を割り、その数値を%に変換し、
低い順からRANK関数を使い優先順位を決定しています。
差が2つまでの場合は半分と言いましたが、1位と2位の%の差が
20%開くと1位に全量振るといったルールは可能でしょうか。

最低在庫量は下記の通りです。

列/行 F   G   H   I     L   M   N   O
8   大阪                東京

10   あ   い   う   え    あ   い   う   え
11   130  110  100  120   180   250  120   250

24   大阪当日在庫        東京当日在庫
25   あ   い   う   え    あ  い   う   え
26   359  271   216   0    374  474  129   233

上記を割ったものが下記%です。

27 割合   割合
28   あ   い   う   え     あ  い   う   え
29   276%  246%  216%  0%   208% 190%  108%  93%
30   優先                優先
31   8    7   6    1     5   4   3    2

追加ルールにすると<え>に関しては順位だけで見ると確かに1位と2位ですが、
大阪は在庫0に対し、東京は最低在庫量と設定されている数の内、の93%は
在庫がある事になります。
こういった場合、大阪に全量振るといった事は可能でしょうか。
(この%の差が20という事になります)

追加ルールを加えた結果、下記の結果になるのが希望です。

46 割振(大阪)

 47	あ	い	う	え	
 48	0	80	0	18	98
 49	0	6,500	0	3,000	9,000

 46	割振(東京)				
 47	あ	い	う	え	
 48	20	100	12	0	132
 49	1,000	7,500	1,000	0	9,500

要望が多くてすみません。
宜しくお願いいたします。

(ゆかり) 2019/09/27(金) 15:08


 >こういった場合、大阪に全量振るといった事は可能でしょうか。

 不可能ではないと思います。

 ただここまで 触れないで来ましたが、質問者さんは VBAのスキルはどの程度なのでしょうか?

 いろいろ考えましたが、

 それぞれのダンボールの出荷可能数は決まっているのですから

 それぞれ、大阪に何個、東京に何個 送った場合をしらみつぶしに総当たりして
 それぞれ積載量を算出
 積載量限度を超えるものを除外し、数量が最大になるものを見つけるという方法でもいいような気がします

 おそらく 数通りの候補が出てくると思うので、そこから優先順位と積載効率を判断すればいいのではないかと思います

(渡辺ひかる) 2019/09/27(金) 16:08


 ルール自体が確固たるものじゃなさそうですね。

 その時々の状況でルールは変動しそう。

 「在庫補充の緊急性」と「トラックの効率性」のバランスをどう取るかですが、
 (明らかにマズいと言う案じゃなければ)
 色んなバランスの取り方があるので、絶対的な甲乙は付けるのが大変だと思います。

 運転手や、在庫管理する人の主観にも左右されそう。(多分、評価は一致しない)

(半平太) 2019/09/27(金) 23:58


渡辺ひかる様→
お恥ずかしいですが、本当に初歩的で簡単な物しか作成した事が無く、
ここまで複雑な物に関しては全くと言っていい程解りません。
頼ってばかりで申し訳ないのですが、もし具体的な式のイメージを既にお持ちでしたら
教えて頂けないでしょうか。

半平太様→
仰る通り、今までは担当者の知識で振り分けていただけで、ルールも
有るようでありませんでした。
それを優先順位と%の差で「緊急性」と「効率性」のルールを決めてしまおうと思いました。
やはりこれだけのルールだけで結果が細かいとVBAでも難しいでしょうか。
(ゆかり) 2019/09/29(日) 10:34


 今、私が考えているのは以下の様なことです。

 1.半分ずつにする場合の判断
   
   優先順位の差が3位以内とかのアイデアの提示がありましたが、
   多分、順位と言うより、在庫充足率の近さが鍵だと思っています。
   
   優先順位より、充足率の差の方がより的確に判断できる。
   
   私の感覚では、取り敢えず20%以内でいいかなと思っていますが、
   具体的数値は流動的に決めていかざる得ないと思うので、
   エクセルシートのどこかに入力できるようにして、
   好きな数値を入れるようにすればいいと思っています。
   
   プログラムで結果を出させてみて、微調整したければ、そのパーセンテージをいじって、
   すぐプログラムを再実行して結果を見ればいいから、ここは手間ないです。

   また、半分と言うのはちょっと表現が正確ではなく、
   対最低在庫充足率が同じになるような分け方、と言う方がいいと思っています。

 2.緊急性と効率性のバランス

   充足率が100%を切っている場合、緊急性が高いと考えます。
   
   そのバランスですが、以下の様な表で指定したらどうかと思っています。
   具体的数値が気に入らない場合、これまたシート上でこの表の数値を書き換えれば済むことです。
   
   <端数許容表>
   在庫充足率  比率    備考
     0%       0%      1個でも配送する            
    50%      20%      縛りの20%以上あれば配送する
    60%      40%                                 
    70%      60%                                 
    80%      80%                                 
    90%      100%     縛りの倍数しか配送しない   
                      
 ※充足率が100%以上ある場合は、
    今までの構想通りの優先順位で割り振って行けばいいかと思っています。

 以上のような構想でプログラムが組めないか考えていますが、
 まだ、完成には程遠い状態です。

 作成作業の中でまた新たなアイデアが出てくる可能性もあります。

(半平太) 2019/09/29(日) 15:11


  ↑
 考慮ファクターが足らないような気がして来ました。
 (それと共に質問が現実的なのか疑問も)

 優先順位の高い(充足率の低い)種類の倉庫在庫が大量にある場合、
 それだけでトラックは一杯になってしまう。

 そうなると「種類別の上限」を設定しなければならない様な気がします。

 一方、そんな考慮をしなければならないような倉庫在庫を持つことに疑問も湧きます。

 サンプルでは、「え」の充足率が低いのに、何故倉庫在庫が8しかないのか?
 「い」の充足率は高いのに、何故倉庫在庫は202もあるのか。

 倉庫在庫自体がバランスを欠いているのではないか?
 在庫/生産管理部署は何をやっているのか?

 翻って、サンプルは問題解決ロジックを作る為の非現実的なデータなのかも知れませんが、
 こう言う問題は、現実的な問題の解決を図るものに限定しないと「荷が重い」ものになります。

(半平太) 2019/09/30(月) 10:13


 こちらの進捗状況ですが

 ベタに 大阪 東京合わせて8つの変数を For Nextで 総当たりするコードを組んでみましたが
遅くて使い物にならないので、どうやって枝切りをするか 思案中です

 最終的には候補をいくつか提供して、最後は人間の判断 ということになりそうです

 半平太さんの言うように、ファクターが多く、複雑なので AIの世界になってしまうような気もします。

(渡辺ひかる) 2019/09/30(月) 11:04


半平太様→

色々考えて頂きありがとうございます。
%で順位を決めているのですから、順位自体より%の数値の低いものから
優先すればいいんですよね。
また倉庫自体に補充の在庫が少ない事についてのご説明ですが、
倉庫から各拠点にはダンボール自体を運ぶ事が目的であり、尚且つこの
ダンボールは繰り返し使うものなので、生産されている訳ではありません。
そのためお客様から倉庫にダンボールが返却され、それを各拠点に送り、拠点で荷物を詰め、
お客様に送る・・・という事をしています。
なのでお客様からの戻り具合に倉庫在庫が左右されるので、優先順位の高い物でも倉庫在庫が
少ないのはそういった理由からになります。
説明不足で申しわけございません。

渡辺ひかる様→
既にコードまで考えてて頂き、ありがとうございます。
やはり1回で振分をするには流石にルールが細かすぎるでしょうか。
VBAがどこまでの事ができるのかも解っておらず、AIにまでなるともうエクセルで
どうこうというレベルの話では済まなくなりますよね・・・

(ゆかり) 2019/09/30(月) 16:30


 >お客様からの戻り具合に倉庫在庫が左右されるので、優先順位の高い物でも倉庫在庫が 
 >少ないのはそういった理由からになります。

 なるほどです。しきりに段ボールと言う言葉が出てきた意味がようやく解りました。

 ところで、この事態が生じた場合、それでいいんですか?
        ↓
 > 優先順位の高い(充足率の低い)種類の倉庫在庫が大量にある場合、
 > それだけでトラックは一杯になってしまう。

 それじゃマズい場合、どういう状態にしたいのか説明してください。
 (今回は、緊急性と効率性のバランスではなく、在庫同士のバランスをどうするか、と言う話に移ります)

(半平太) 2019/09/30(月) 17:25


 >%で順位を決めているのですから、順位自体より%の数値の低いものから 
 >優先すればいいんですよね。

 そこ、ちょっと誤解があります。
 「優先順位の高いものから」と「%の数値の低いものから」は全く同じ意味になります。

 問題は、同種段ボールについて、大阪と東京の充足率が(例えば)1%しか違いが無かった場合でも、
 大阪が優先だとして、倉庫在庫を総取りしてもいいのか、と言うことです。

 多分、それはマズいから仲良く分けようよ、となる訳ですが、じゃ何%までなら仲良く分けて、
 それ以上なら、優先する拠点が総取りしていいか、という議論になります。

 その差の限界を例えば20%とかでどうか、と言う話です。
 (このパーセンテージは試行錯誤できるようにプログラミングする)

 ・・で、優先順位の差で見るのは意味がないと言う話です
 (似たような傾向にはあるんでしょうが)。

 いずれにしてもこの話は、充足率が100%を割っている時の話しであって、
 100%以上なら緊急性はないので、1%でも優先順位を取った方が、総取りしても差し支えはないでしょう。

(半平太) 2019/09/30(月) 20:21


半平太様→
解りやすいご説明ありがとうございます!

> 優先順位の高い(充足率の低い)種類の倉庫在庫が大量にある場合、
> それだけでトラックは一杯になってしまう。


大阪と東京で分ける差は20%でいいかと思うのですが、
大阪トラック内で<あ〜え>の差を出すにはということですよね?
こちらに関しましては、仮に大阪内で<あ〜え>全てが充足率50%未満のの場合、
最低でも1セットずつは載せたいのが希望です。
(全てを2セットずつ載せると幅が10000になるので不可能なため)
残りは充足率の低い順に最大量載せてしまっていいかと思います。
(あくまで倉庫在庫がある場合なので、在庫が無い場合は優先度が高い順にある分だけ)

また、仮に大阪で<あ>のみ100%を切っていて、<あ>のみでトラックを一杯にできるだけ
倉庫に在庫がある場合は、<あ>のみで一杯にする事は問題ありません。

もっと細かく設定した方がいいでしょうか?

(ゆかり) 2019/10/01(火) 11:20


 >もっと細かく設定した方がいいでしょうか? 

 いやー、あまり細かいとプログラムの作りも複雑になりますし、
 そんなに細かく作り込んでも、現実には大差ない結果になるかも知れないので、
 ここら辺を落としどころとしたいです。

 以上で作り込めるかやってみます。気長に待っててください。

 ※それまでに、他の回答者からいいプログラムが出されれば、
   そちらにお任せして私は引っ込みます。

(半平太) 2019/10/01(火) 12:31


半平太様→

やはりルールが細かければ細かい程複雑になりますよね。
本当に何から何までお任せしてしまいすみません。

定期的にこちらの掲示板を確認しにきます。
気長にお待ちしていますので、宜しくお願いいたします。
(ゆかり) 2019/10/01(火) 15:27


 レイアウトを少し変えます。
 ※データが飛び飛びになっていると処理がやりにくいので・・

 流れ
 1.新規ブックを作ってください。(手作業)

 2.基本レイアウトを作成する(マクロで自動作成)
  このマクロコードは1回こっきりの実行なので、すぐ消す
  詳しくは、後記 <レイアウトの自動作成手順> で。

 3.常駐マクロを貼り付ける、
 (1) Sheet1のシートモジュール、
 (2) 標準モジュール
 (3)クラスモジュール

 以上で準備が完了なので、以下の手順で利用する

 (1)所要データを手入力する(初期値は、上記2で自動的に入っています)

 (2)マクロ「割振り」を実行する。
   ※コマンドボタンを一つ貼り付けて、そこにマクロを登録すると実行は楽です。

 (3)結果がB9:M9(大阪分)、B12:M12(東京) に表示されます。

 ----Sheet1のシートモジュールにコピペ-------------------------------------------------(あ)

 <レイアウトの自動作成手順>
  新規ブックのSheet1の「シート見出し」を右クリックして、「コードの表示(V)」を選ぶと
  画面中央に白いエリアが表れます。(VBE画面です)

  その白いエリアに後記マクロ(OnlyOnce)をコピぺし、F5キーを押下してください

   (すると、マクロ「onlyOnce」が実行され、自動的に数式と所要データが入力されます)

  ※このマクロは1回実行したら用済みです。
      実行後「Ctrl+Z」でコードを消去し同じエリアに後記「シートモジュールに貼り付けるコード」をコピペしてください。

 Private Sub onlyOnce()
     With Sheets("Sheet1")

      '名前定義
      .Range("B6:M6").Name = "幅"
      .Range("B15:E15").Name = "倉庫在庫"
      .Range("b25:I25").Name = "優先順位"
      .Range("A48:B53").Name = "端数許容表"
      .Range("B32:I45").Name = "baseDATA"

      Rem 標準外書式セルをまとめて処理
      .Range("B6:M6,P6,N10,N13,Q13,B18:E18").NumberFormatLocal = "#,##0"
      .Range("B16:E16,B22:I22,D27").NumberFormatLocal = """(""G/標準"")"""
      .Range("Q16").NumberFormatLocal = "yyyy/m/d"
      .Range("B23:I23,J26,B28:I28,B29,B38:I38,B42:I42,A48:B53,H48:I53").NumberFormatLocal = "0%"
      .Range("B24:I24").NumberFormatLocal = """(""0%"")"""
      .Range("B39:I39").NumberFormatLocal = "#,##0;[赤]-#,##0"
      .Range("B40,D40").NumberFormatLocal = "0.0"

      Rem 生データのセルをまとめて処理
     .Range("A4").Value = "種類"
     .Range("B4:M4").Value = [{"あ","い","う","え","お","か","き","く","け","こ","さ","し"}]
     .Range("B19:I19").Value = [{"あ","い","う","え","あ","い","う","え"}]

     .Range("A5").Value = "積上個数"
     .Range("B5:C5,H5:I5,B12").Value = 20
     .Range("D5:E5,L5,D12").Value = 12
     .Range("F5:G5").Value = 9
     .Range("J5:K5").Value = 10
     .Range("M5,C31").Value = 2
     .Range("A6").Value = "幅"
     .Range("B6,D6,F6,L6").Value = 1000
     .Range("C6,E6,G6:K6,M6").Value = 1500
     .Range("A8").Value = "トラック積み込み"
     .Range("N8").Value = "合計"
     .Range("A9").Value = "大阪数量"
     .Range("B9,D9,F9:M9,E12:M12,E21,A48:B48").Value = 0
     .Range("C9").Value = 80
     .Range("E9,E15").Value = 18
     .Range("Q9").Value = "手入力(ほどんど不変)"
     .Range("A10").Value = "大阪幅"
     .Range("Q10").Value = "手入力(試行錯誤できる)"
     .Range("Q11").Value = "手入力(作業の都度変わる)"
     .Range("A12").Value = "東京数量"
     .Range("C12,D20").Value = 100
     .Range("A13").Value = "東京幅"
     .Range("Q13").Value = "数式セル"
     .Range("A15").Value = "倉庫在庫"
     .Range("B15").Value = 69
     .Range("C15").Value = 202
     .Range("D15").Value = 13
     .Range("A16,A22,A24").Value = "(積込み後) "
     .Range("B18").Value = "大阪"
     .Range("F18").Value = "東京"
     .Range("A20,A36").Value = "最低在庫量"
     .Range("B20").Value = 130
     .Range("C20").Value = 110
     .Range("E20,H20").Value = 120
     .Range("F20").Value = 180
     .Range("G20,I20").Value = 250
     .Range("A21,A37").Value = "現在在庫量"
     .Range("B21").Value = 359
     .Range("C21").Value = 271
     .Range("D21").Value = 216
     .Range("F21").Value = 374
     .Range("G21").Value = 474
     .Range("H21").Value = 129
     .Range("I21").Value = 233
     .Range("A23,A38").Value = "充足率"
     .Range("K23").Value = "同順位を回避するためColumnを加味"
     .Range("A25").Value = "優先順位"
     .Range("A26,A39").Value = "看做同順位有"
     .Range("J26,B49").Value = 0.2
     .Range("K26").Value = "両方とも100%未満で、その差が20%未満"
     .Range("A27,A40").Value = "百pctまでの個数"
     .Range("A28,A42").Value = "按分率"
     .Range("A31").Value = "割振順"
     .Range("B31,B53").Value = 1
     .Range("D31:I31").Value = [{3,4,5,6,7,8}]
     .Range("A32").Value = "都市名"
     .Range("A33").Value = "CitiNo"
     .Range("A34").Value = "種類名"
     .Range("A35").Value = "種類NO"
     .Range("A41").Value = "最少端数"
     .Range("A43").Value = "積上げ"
     .Range("A46").Value = "端数許容表"
     .Range("A47").Value = "現在の充足率"
     .Range("C48").Value = "1個でも配送する"
     .Range("A49").Value = 0.5
     .Range("C49").Value = "縛りの20%以上あれば配送する"
     .Range("A50,B51").Value = 0.6
     .Range("B50").Value = 0.4
     .Range("A51").Value = 0.7
     .Range("A52:B52").Value = 0.8
     .Range("A53").Value = 0.9
     .Range("C53").Value = "縛りの倍数しか配送しない"

      Rem 数式セルをまとめて処理
      .Range("B10:M10,B13:M13").FormulaR1C1Local = "=ROUNDUP(R[-1]C/R5C,0)*R6C"
      .Range("N10,N13").FormulaR1C1Local = "=SUM(RC[-12]:RC[-1])"
      .Range("B16:E16").FormulaR1C1Local = "=R[-1]C-SUM(R[-7]C,R[-4]C)"
      .Range("B22:E22").FormulaR1C1Local = "=R[-1]C+R[-13]C"
      .Range("F22:I22").FormulaR1C1Local = "=R[-1]C+R[-10]C[-4]"
      .Range("B23:I23").FormulaR1C1Local = "=ROUND(R[-2]C/R[-3]C,2)+0.0001*COLUMN()"
      .Range("B24:I24").FormulaR1C1Local = "=R[-2]C/R[-4]C"
      .Range("B25:I25").FormulaR1C1Local = "=RANK(R[-2]C,R23C2:R23C9,1)"
      .Range("B26:E26").FormulaR1C1Local = "=IF(AND(MAX(R[-3]C,R[-3]C[4])<100%,ABS(R[-3]C-R[-3]C[4])<RC10),R[-1]C[4],"""")"
      .Range("F26:I26").FormulaR1C1Local = "=IF(AND(MAX(R[-3]C,R[-3]C[-4])<100%,ABS(R[-3]C-R[-3]C[-4])<RC10),R[-1]C[-4],"""")"
      .Range("B27:I27").FormulaR1C1Local = "=MAX(0,MIN(R[-7]C-R[-6]C,R[-7]C))"
      .Range("B28").FormulaR1C1Local = "=IF(ISNUMBER(R[-2]C),ROUNDUP(R[-1]C/(R[-1]C+R[-1]C[4]),2),"""")"
      .Range("C28:E28").FormulaR1C1Local = "=IF(ISNUMBER(R[-2]C),ROUND(R[-1]C/(R[-1]C+R[-1]C[4]),2),"""")"
      .Range("F28:I28").FormulaR1C1Local = "=IF(ISNUMBER(R[-2]C),1-RC[-4],"""")"
      .Range("B32:I32").FormulaR1C1Local = "=IF(R[1]C=1,""大阪"",""東京"")"
      .Range("B33:I33").FormulaR1C1Local = "=IF(MATCH(R[-2]C,優先順位,0)<=4,1,2)"
      .Range("B34:I34").FormulaR1C1Local = "=LOOKUP(R[1]C,R[-3]C2:R[-3]C5,R[-15]C2:R[-15]C5)"
      .Range("B35:I35").FormulaR1C1Local = "=MOD(MATCH(R[-4]C,R25C2:R25C9,0)-1,4)+1"
      .Range("B36:I37").FormulaR1C1Local = "=INDEX(IF(R33C=R33C2,R[-16]C2:R[-16]C5,R[-16]C6:R[-16]C9),R35C)"
      .Range("B38:I38").FormulaR1C1Local = "=INDEX(R23C2:R23C9,(MATCH(R[-7]C,R25C2:R25C9,0)))"
      .Range("B39:I39").FormulaR1C1Local = "=INDEX(R26C2:R26C9,(MATCH(R[-8]C,R25C2:R25C9,0)))"
      .Range("B40:I40").FormulaR1C1Local = "=INDEX(IF(R33C=R33C2,R[-13]C2:R[-13]C5,R[-13]C6:R[-13]C9),R35C)"
      .Range("B41:I41").FormulaR1C1Local = "=ROUND(LOOKUP(R[-3]C,端数許容表)*R[2]C,0)"
      .Range("B42:I42").FormulaR1C1Local = "=INDEX(IF(R33C=R33C2,R[-14]C2:R[-14]C5,R[-14]C6:R[-14]C9),R35C)"
      .Range("B43:I43").FormulaR1C1Local = "=INDEX(R5C2:R5C5,R[-8]C)"

      Rem 塗りつぶしセルをまとめて処理
      .Range("B4:M6,Q9,B15:E15,B19:I20").Interior.ColorIndex = 6
      .Range("F9:M9,Q11,F12:M12,B21:I21").Interior.ColorIndex = 24
      .Range("B10:N10,B13:N13,Q13,B16:E16,B22:I28,B32:I43").Interior.ColorIndex = 40
      .Range("Q10,J26,A48:B53").Interior.ColorIndex = 35
     End With
 End Sub

 ’※上のOnlyOnceをF5キー押下で実行後、「Ctrl+Z」で当該コードを消去したら、
 ’同じSheet1のモジュールの同じエリアに下記コピペ----------------------------------(い)

 Option Explicit

 Enum R
     都市名 = 1
     CitiNo
     種類名
     種類NO
     最低在庫量
     現在在庫量
     充足率
     看做同順位有
     百pctまでの個数
     最少端数
     按分率
     積上げ
 End Enum

 Private bsDT
 Private Inventry
 Private Priority

 Private Trucks(1 To 2) As Truck

 Sub 割振り()
     Const 緊急 As Boolean = True
     Const 通常 As Boolean = False

     Dim NN As Long
     Dim Prio As Long
     Dim otherPrio
     Dim Temp As Long, num As Long

     Dim KindNo As Long
     Dim balForCalc(0 To 2)

     Dim 補充数(0 To 2)
     Dim rslt

     '割振り開始

     'マスターデータ認識
     Set MastKind = Range("B4").Resize(1, 12)
     Set MastPile = Range("B5").Resize(1, 12)
     Set MastLeng = Range("B6").Resize(1, 12)

     For NN = 1 To 2 '2台のトラックオブジェクトを作る
         Set Trucks(NN) = New Truck
         Call Trucks(NN).setOriginalDATA(NN) '基本データを格納
     Next NN

     bsDT = Range("BaseDATA").Value      'スタート状態の情報を格納
     Inventry = Range("倉庫在庫").Value
     Priority = Range("優先順位").Value

     '第一ラウンド(緊急補充)
     For Prio = 1 To 8
         If Trucks(bsDT(R.CitiNo, Prio)).LengthLeft > 0 Then '積載余力があるなら処理

             '見做同順位があるかチェックする
             If bsDT(R.看做同順位有, Prio) <> "" And bsDT(R.看做同順位有, Prio) <> "済" Then
                 '在庫を2都市用に分ける

                 otherPrio = bsDT(R.看做同順位有, Prio)

                 balForCalc(1) = Int(Inventry(1, bsDT(R.種類NO, Prio)) * bsDT(R.按分率, Prio))
                 balForCalc(2) = Int(Inventry(1, bsDT(R.種類NO, otherPrio)) * bsDT(R.按分率, otherPrio))

                 Call 振分け(Prio, balForCalc(1), bsDT(R.最少端数, Prio), 緊急)
                 bsDT(R.看做同順位有, Prio) = "済"

                 '相手方も同じ処理をする
                 Call 振分け(otherPrio, balForCalc(2), bsDT(R.最少端数, otherPrio), 緊急)
                 bsDT(R.看做同順位有, otherPrio) = "済"

             ElseIf bsDT(R.充足率, Prio) < 1 Then '緊急補充ラウンドは、充足率100%未満のみ対象とする
                 Call 振分け(Prio, Inventry(1, bsDT(R.種類NO, Prio)), bsDT(R.最少端数, Prio), 緊急)
             End If
         End If
     Next Prio

     '第二ラウンド(通常処理)
     For Prio = 1 To 8
         If Trucks(bsDT(R.CitiNo, Prio)).LengthLeft > 0 Then '積載余力があるなら処理
             Call 振分け(Prio, Inventry(1, bsDT(R.種類NO, Prio)), bsDT(R.最少端数, Prio), 通常)
         End If
     Next Prio

     '第三ラウンド(端数上乗せ処理)
     'トラックの数量が縛り数未満で天井に空きに上積みする(トラックの幅には影響しない)
     Dim Niche, fewerNum
     For NN = 1 To 2
         rslt = Trucks(NN).Result

         For KindNo = 1 To 4
         '縛り未満のスペースがあれば、上積みする。
             Niche = Application.Ceiling(rslt(1, KindNo), MastPile(1, KindNo)) - rslt(1, KindNo)

             If Niche > 0 Then
               '倉庫在庫残があれば上積みする
               fewerNum = Application.Min(Niche, Inventry(1, KindNo))
                   Call Trucks(NN).putOnboard(fewerNum, KindNo)
                   Prio = getPrioFromTruckNoAndKindNo(NN, KindNo)
                   Call BaseDATAupdate(Prio, fewerNum, KindNo)
             End If
         Next KindNo
     Next NN

     '第四ラウンド(空幅あれば追加積載処理)倉庫在庫残が多い方から優先処理する

     Dim tgtKindNo, tgtBal, 置き去りKindNo(1 To 4)

     Do
         If Application.Sum(Inventry) <= 0 Or _
            Application.Sum(置き去りKindNo) = 4 Then '終了
              GoTo 打ち出し
         Else
             tgtBal = 0 '初期化

             For KindNo = 1 To 4
                 If tgtBal < Inventry(1, KindNo) And 置き去りKindNo(KindNo) = 0 Then
                     tgtBal = Inventry(1, KindNo)
                     tgtKindNo = KindNo
                 End If
             Next KindNo

             If tgtBal = 0 Then '終了
                 GoTo 打ち出し
             Else
                 'その空幅があるトラックに積む
                 For NN = 1 To 2
                    If Trucks(NN).LengthLeft >= MastLeng(1, tgtKindNo) Then
                      Call 振分け(getPrioFromTruckNoAndKindNo(NN, tgtKindNo), tgtBal, 0, 通常)
                      Exit For
                    End If
                 Next
                 If NN = 3 Then 'トラックにその段ボールの空幅は存在しない
                     置き去りKindNo(tgtKindNo) = 1
                 End If
             End If
         End If
     Loop

 打ち出し:
     printResult
 End Sub

 '幅オーバーしない様に、1個ずつ積み込んで進める
 Private Function getSafe補充数(ByRef Trk As Truck, ByVal Temp, ByVal KindNo)
     Dim num As Long

     For num = 1 To Temp '1個ずつ積み込んで、幅オーバー直前で終了する
         With Trk
             Call .putOnboard(1, KindNo)

             If .LengthLeft < 0 Then     '幅オーバーしたら、最後の積込みを戻す
                 Call .putOnboard(-1, KindNo)
                 Exit For
             End If
         End With
     Next

     getSafe補充数 = num - 1
 End Function

 Private Function MaxLoadable(在庫, 縛り, 許容端数) '端数込みの積込み上限を返す
     Dim tempNum, SurPlus

         tempNum = Application.Floor(在庫, 縛り)
         SurPlus = 在庫 - tempNum
         MaxLoadable = tempNum + IIf(SurPlus >= 許容端数, SurPlus, 0)
 End Function

 Private Sub 振分け(Pr, balForCalc, 最少端数, Urgent As Boolean)
     Dim loadableNum, Temp, 補充数, KindNo

     loadableNum = MaxLoadable(balForCalc, bsDT(R.積上げ, Pr), 最少端数)

     If Urgent Then
         If bsDT(R.充足率, Pr) < 0.5 Then   '充足率が50%未満は、とりあえず縛りの1倍を限度とする
             loadableNum = Application.Min(loadableNum, bsDT(R.積上げ, Pr))
         End If
             Temp = Application.Min(bsDT(R.百pctまでの個数, Pr), loadableNum)
     Else
         Temp = loadableNum
     End If

     If Temp > 0 Then
         KindNo = bsDT(R.種類NO, Pr)

         'トラックの幅以内でTempを積込む
         補充数 = getSafe補充数(Trucks(bsDT(R.CitiNo, Pr)), Temp, KindNo)

         Call BaseDATAupdate(Pr, 補充数, KindNo)  '積込んだ個数をBaseDATAに反映させる
     End If
 End Sub

  '積込んだ個数をBaseDATAに反映させる
 Private Sub BaseDATAupdate(Pr, 補充数, KindNo)
         Inventry(1, KindNo) = Inventry(1, KindNo) - 補充数
         bsDT(R.現在在庫量, Pr) = bsDT(R.現在在庫量, Pr) + 補充数
         bsDT(R.充足率, Pr) = bsDT(R.現在在庫量, Pr) / bsDT(R.最低在庫量, Pr)
 End Sub

 'トラック番号と種類番号から優先順位を取得する
 Private Function getPrioFromTruckNoAndKindNo(TruckNo, KindNo)
   getPrioFromTruckNoAndKindNo = Priority(1, KindNo + (TruckNo - 1) * 4)
 End Function

 Private Sub printResult() '結果を打ち出す
     Range("B9").Resize(1, 12).Value = Trucks(1).Result
     Range("B12").Resize(1, 12).Value = Trucks(2).Result
 End Sub

 ’標準モジュールにコピぺ--------------------------------------------------(う)
 ’標準モジュールを一枚挿入して、下記コードを貼り付ける

 Option Explicit

 Public MastKind As Range
 Public MastPile As Range
 Public MastLeng As Range

 ’クラスモジュールにコピペ------------------------------------------------(え)

 ’クラスモジュールを一つ挿入し、当該モジュールに下記コードを貼り付ける
 ’Defaultでは、オブジェクト名が「Class1」となっているので、「Truck」に変更してください。

 Option Explicit

 Private Const length As Double = 9600

 Private BoundFor As Long '1=Osaka,2=Tokyo

 Private Kind    '種類名
 Private Suryo   '数量配列格納

 Public Sub setOriginalDATA(ByVal bFor As Long)
     Dim Wsh As Worksheet
     Dim RW As Long

     BoundFor = bFor '1=Osaka、2=Tokyou
     Set Wsh = Worksheets("Sheet1")

     RW = IIf(BoundFor = 1, 9, 12)
     Wsh.Cells(RW, "B").Resize(1, 4).Value = 0
     Suryo = Wsh.Cells(RW, "B").Resize(1, 12).Value
 End Sub

 Public Function putOnboard(ByVal 補充 As Long, ByVal 種類NO As Long)
     Suryo(1, 種類NO) = Suryo(1, 種類NO) + 補充
 End Function

 Public Property Get LenTTL()
     Dim NN As Long
     Dim lengPerKind As Double

     LenTTL = 0
     For NN = 1 To 12
         lengPerKind = WorksheetFunction.RoundUp(Suryo(1, NN) / MastPile(1, NN), 0) * MastLeng(1, NN)
         LenTTL = LenTTL + lengPerKind
     Next NN
 End Sub

 Public Property Get LengthLeft()
     LengthLeft = length - LenTTL
 End Property

 Public Property Get Result() '振分け結果を返す
     Result = Suryo
 End Property

 ’以上
 -----------------------------------------------------------------

 <Sheet1 結果図>
  行 ________A________ ___B___ ___C___ ___D___ __E__ ___F___ ___G___ ___H___ __I__ __J__ __K__ __L__ __M__ __N__
   4 種類              あ      い      う      え    お      か      き      く    け    こ    さ    し         
   5 積上個数              20      20      12     12      9       9      20     20    10    10    12     2      
   6 幅                 1,000   1,500   1,000  1,500  1,000   1,500   1,500  1,500 1,500 1,500 1,000 1,500      
   7                                                                                                            
   8 トラック積み込み                                                                                      合計 
   9 大阪数量               0      80       0     18      0       0       0      0     0     0     0     0      
  10 大阪幅                 0    6000       0   3000      0       0       0      0     0     0     0     0 9,000
  11                                                                                                            
  12 東京数量              20     100      12      0      0       0       0      0     0     0     0     0      
  13 東京幅              1000    7500    1000      0      0       0       0      0     0     0     0     0 9,500
  14                                                                                                            
  15 倉庫在庫              69     202      13     18                                                            
  16 (積込み後)          (49)    (22)     (1)    (0)                                                            
  17                                                                                                            
  18                   大阪                          東京                                                       
  19                   あ      い      う      え    あ      い      う      え                                 
  20 最低在庫量           130     110     100    120    180     250     120    250                              
  21 現在在庫量           359     271     216      0    374     474     129    233                              
  22 (積込み後)         (359)   (351)   (216)   (18)  (394)   (574)   (141)  (233)                              
  23 充足率            276%    246%    216%    0%    208%    190%    108%    93%                                
  24 (積込み後)        (276%)  (319%)  (216%)  (15%) (219%)  (230%)  (118%)  (93%)                              
  25 優先順位               8       7       6      1      5       4       3      2                              
  26 看做同順位有                                                                  20%                          
  27 百pctまでの個数        0       0     (0)    120      0       0       0     17                              
  28 按分率                                                                                                     
  29                                                                                                            
  30                                                                                                            
  31 割振順                 1       2       3      4      5       6       7      8                              
  32 都市名            大阪    東京    東京    東京  東京    大阪    大阪    大阪                               
  33 CitiNo                 1       2       2      2      2       1       1      1                              
  34 種類名            え      え      う      い    あ      う      い      あ                                 
  35 種類NO                 4       4       3      2      1       3       2      1                              
  36 最低在庫量           120     250     120    250    180     100     110    130                              
  37 現在在庫量             0     233     129    474    374     216     271    359                              
  38 充足率            0%      93%     108%    190%  208%    216%    246%    276%                               
  39 看做同順位有                                                                                               
  40 百pctまでの個数    120.0      17     0.0      0      0       0       0      0                              
  41 最少端数               0      12      12     20     20      12      20     20                              
  42 按分率                                                                                                     
  43 積上げ                12      12      12     20     20      12      20     20                              
  44                                                                                                            
  45                                                                                                            
  46 端数許容表                                                                                                 
  47 現在の充足率                                                                                               
  48 0%                0%                                                                                       
  49 50%               20%                                                                                      
  50 60%               40%                                                                                      
  51 70%               60%                                                                                      
  52 80%               80%                                                                                      
  53 90%               100%                                                                                     

(半平太) 2019/10/01(火) 23:06


 半平太さんの大作の後でなんですが、かねてから 提案していたように
 総当たりで・・・

 下記のコードを実行すると 新規シートが追加され、大阪、東京 それぞれ 8000以上 9500以下の組み合わせを出力します。
 今回のパターンですと 887通りでした。
 本来ならマスタ関係も変数にするのですが、それは後回しにしてリテラルでやってます。

 作成後、オートフィルタをかけて、優先順位と、積載効率を判断しながら絞り込んでみてください

 ちなみに私の判断では、積載効率を優先して

 46	割振(大阪)				
 47	あ	い	う	え	
 48	40	60		18	118
 49	2,000	4,500		3,000	9,500

 46	割振(東京)				
 47	あ	い	う	え	
 48		100	13		113
 49		7,500	2,000		9,500

となりました。

 Sub test4()
    Dim i1 As Long '大阪あ
    Dim i2 As Long '大阪い
    Dim i3 As Long '大阪う
    Dim i4 As Long '大阪え
    Dim j1 As Long '東京あ
    Dim j2 As Long '東京い
    Dim j3 As Long '東京う
    Dim j4 As Long '東京え
    Dim LOSK As Long
    Dim LTYO As Long
    Dim myCnt As Long
    Dim mySht As Worksheet

    Set mySht = ThisWorkbook.Worksheets.Add
    mySht.Range("A1:K1") = Array("NO.", "大阪あ", "大阪い", "大阪う", "大阪え", "長さ計", _
                "東京あ", "東京い", "東京う", "東京え", "長さ計")

    For i1 = 0 To Int((69 + 20) / 20) * 20 Step 20
        If Int((i1 + 19) / 20) * 1000 > 9500 Then Exit For

        For j1 = 0 To Int((69 - i1 + 20) / 20) * 20 Step 20
            If Int((j1 + 19) / 20) * 1000 > 9500 Then Exit For

            For i2 = 0 To Int((202 + 20) / 20) * 20 Step 20
                If Int((i1 + 19) / 20) * 1000 _
                + Int((i2 + 19) / 20) * 1500 > 9500 Then Exit For

                For j2 = 0 To Int((202 - i2 + 19) / 20) * 20 Step 20
                    If Int((j1 + 19) / 20) * 1000 _
                    + Int((j2 + 19) / 20) * 1500 > 9500 Then Exit For

                    For i3 = 0 To Int((13 + 12) / 12) * 12 Step 12
                        If Int((i1 + 19) / 20) * 1000 _
                        + Int((i2 + 19) / 20) * 1500 _
                        + Int((i3 + 11) / 12) * 1000 > 9500 Then Exit For

                        For j3 = 0 To Int((13 - i3 + 12) / 12) * 12 Step 12
                            If Int((j1 + 19) / 20) * 1000 _
                            + Int((j2 + 19) / 20) * 1500 _
                            + Int((j3 + 11) / 12) * 1000 > 9500 Then Exit For

                            For i4 = 0 To Int((18 + 12) / 12) * 12 Step 12
                                If Int((i1 + 19) / 20) * 1000 _
                                + Int((i2 + 19) / 20) * 1500 _
                                + Int((i3 + 11) / 12) * 1000 _
                                + Int((i4 + 11) / 12) * 1500 > 9500 Then Exit For

                                For j4 = 0 To Int((18 - i4 + 12) / 12) * 12 Step 12
                                    If Int((j1 + 19) / 20) * 1000 _
                                    + Int((j2 + 19) / 20) * 1500 _
                                    + Int((j3 + 11) / 12) * 1000 _
                                    + Int((j4 + 11) / 12) * 1500 > 9500 Then Exit For

                                    LOSK = Int((i1 + 19) / 20) * 1000 _
                                    + Int((i2 + 19) / 20) * 1500 _
                                    + Int((i3 + 11) / 12) * 1000 _
                                    + Int((i4 + 11) / 12) * 1500

                                    LTYO = Int((j1 + 19) / 20) * 1000 _
                                    + Int((j2 + 19) / 20) * 1500 _
                                    + Int((j3 + 11) / 12) * 1000 _
                                    + Int((j4 + 11) / 12) * 1500

                                    If LOSK >= 8000 And LTYO >= 8000 Then
                                        myCnt = myCnt + 1
                                        With mySht.Cells(Rows.Count, "A").End(xlUp).Offset(1)
                                            .Value = myCnt
                                            If i1 = 0 Then
                                                .Offset(, 1).Value = i1
                                            Else
                                                .Offset(, 1).Value = i1 - 19 & "〜" & i1
                                            End If

                                            If i2 = 0 Then
                                                .Offset(, 2).Value = i2
                                            Else
                                                .Offset(, 2).Value = i2 - 19 & "〜" & i2
                                            End If

                                            If i3 = 0 Then
                                                .Offset(, 3).Value = i3
                                            Else
                                                .Offset(, 3).Value = i3 - 11 & "〜" & i3
                                            End If

                                            If i4 = 0 Then
                                                .Offset(, 4).Value = i4
                                            Else
                                                .Offset(, 4).Value = i4 - 11 & "〜" & i4
                                            End If

                                            .Offset(, 5).Value = LOSK

                                            If j1 = 0 Then
                                                .Offset(, 6).Value = j1
                                            Else
                                                .Offset(, 6).Value = j1 - 19 & "〜" & j1
                                            End If

                                            If j2 = 0 Then
                                                .Offset(, 7).Value = j2
                                            Else
                                                .Offset(, 7).Value = j2 - 19 & "〜" & j2
                                            End If

                                            If j3 = 0 Then
                                                .Offset(, 8).Value = j3
                                            Else
                                                .Offset(, 8).Value = j3 - 11 & "〜" & j3
                                            End If

                                            If j4 = 0 Then
                                                .Offset(, 9).Value = j4
                                            Else
                                                .Offset(, 9).Value = j4 - 11 & "〜" & j4
                                            End If

                                            .Offset(, 10).Value = LTYO

                                        End With

                                    End If
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
    Next
 End Sub
(渡辺ひかる) 2019/10/02(水) 13:18

半平太様
渡辺ひかる様

まさかの翌日にお二人からご返答頂けるとは思わず、
ご連絡が遅くなってしまい申し訳ございません。
お二人ともこんなにも綿密なコードを作成していただき、ありがとうございました!!
そして初心者に私にも解りやすく作成手順まで書いてくださり、本当にありがとうございます!!

どちらも一度作成させて頂き、実際の割振りとあわせて検証させて頂きたいと思います。
本当になんとお礼を言っていいのか・・・ありがとうございました!!
(ゆかり) 2019/10/02(水) 17:03


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.