[[20231126220127]] 『箱詰め作業のシート作成』(den) ページの最後に飛ぶ

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

 

『箱詰め作業のシート作成』(den)

web版のexcelにて、箱詰め作業のシートを作成しておりますが、
関数の計算結果にバグがでてしまい困ってます。

作成途中のシートを下記urlにupしましたので
正しい関数の使い方をご指導いただけますでしょうか。
よろしくお願いします。

https://u1.getuploader.com/sample/download/17936

< 使用 アプリ:web版のexcel、使用 OS:Windows10 >


 内容↓こんな感じでした。

 ▼イメージ図

 [___]|___A____|______B_______|___C____|_______D_______|___E____|_______F________|_______G________|___H____|___I____|_______J_______|___K____|
 [  1]|        |              |        |            ___|________|________________|________________|________|________|_______________|________|
 [  2]|        |              |        |箱に詰める数_________________________________________________________________________________________|
 [  3]|        |              |        |先(power混載)_________|中(power同一)____________________________________|後(power混載)_________|
 [  4]|        |power         |発注数  |口割れ番号     |個数    |口割れ番号(頭)|口割れ番号(尾)|個数    |箱数     口割れ番号     |個数    |
 [  5]|        |             1|      20|               |      25|                |                |       0|0       |               |      25|
 [  6]|        |             2|      20|               |       5|                |                |       0|0       |               |      15|
 [  7]|        |             3|      20|               |      12|                |                |      27|       1|               |     -19|
 [  8]|        |             4|       0|               |      46|                |                |       0|0       |               |      23|
 [  9]|        |             5|     100|               |      23|                |                |      54|       2|               |      23|
 [ 10]|        |             6|     140|               |       4|                |                |     135|       5|               |       1|
 [ 11]|        |             7|     180|               |      26|                |                |     135|       5|               |      19|
 [ 12]|        |             8|     180|               |       8|                |                |     162|       6|               |      10|
 [ 13]|        |             9|     220|               |      17|                |                |     189|       7|               |      14|
 [ 14]|        |            10|     230|               |      13|                |                |     216|       8|               |       1|
 [ 15]|        |            11|     250|               |      26|                |                |     216|       8|               |       8|
 [ 16]|        |            12|     240|               |      19|                |                |     216|       8|               |       5|
 [ 17]|        |            13|     280|               |      22|                |                |     243|       9|               |      15|
 [ 18]|        |            14|     290|               |      12|                |                |     270|      10|               |       8|
 [ 19]|        |            15|     270|               |      19|                |                |     243|       9|               |       8|
 [ 20]|        |            16|     230|               |      19|                |                |     189|       7|               |      22|
 [ 21]|        |            17|     250|               |       5|                |                |     243|       9|               |       2|
 [ 22]|        |            18|     220|               |      25|                |                |     189|       7|               |       6|
 [ 23]|        |            19|       1|               |      21|                |                |       0|0       |               |      11|
 [ 24]|        |            20|     170|               |      10|                |                |     135|       5|               |      25|
 [ 25]|        |            21|     200|               |       2|                |                |     189|       7|               |       9|
 [ 26]|        |            22|     160|               |      18|                |                |     135|       5|               |       7|
 [ 27]|        |            23|     220|               |      20|                |                |     189|       7|               |      11|
 [ 28]|        |            24|     220|               |      16|                |                |     189|       7|               |      15|
 [ 29]|        |            25|     180|               |      12|                |                |     162|       6|               |       6|
 [ 30]|        |            26|     170|               |      21|                |                |     135|       5|               |      14|
 [ 31]|        |            27|     110|               |      13|                |                |      81|       3|               |      16|
 [ 32]|        |            28|      80|               |      11|                |                |      54|       2|               |      15|
 [ 33]|        |            29|      60|               |      12|                |                |      27|       1|               |      21|
 [ 34]|        |            30|      40|               |       6|                |             175|      27|       1|            176|       7|
 [ 35]|        |            31|      20|            176|      20|                |                |       0|0       |               |        |
 [ 36]|        |合計          |    4771|               |        |                |                |        |        |               |        |
 [ 37]|        |必要な箱の数  |     176|               |        |                |                |        |        |               |        |
 [ 38]|        |箱から余った数|      19|               |        |                |                |        |        |               |        |

 [C36] =SUM(C5:C35)
 [C37] =QUOTIENT(C36,27)
 [C38] =MOD(C36,27)
 [D35] =C37
 [E5] =IF(E6+K5=27,C5-H5-K5,K5)
 [E6] =IF(E7+K6=27,C6-H6-K6,E7+K6)
 [E35] =C35-H35
 [G34] =J34-I34
 [H5] =IF(I5="",H5="",I5*27)
 [I5] =IF(OR(C5-K5<27),"0",QUOTIENT((C5-K5),27))
 [I35] =IF(OR(C35<27,C35=""),"0",(QUOTIENT(C35,27)))
 [J34] =D35
 [K5] =IF(27-E6>C5,C5+E6,27-E6)

 Rem (参考)==============================================================================================
    [C36].FormulaR1C1 = "=SUM(R[-31]C:R[-1]C)"
    [C37].FormulaR1C1 = "=QUOTIENT(R[-1]C,27)"
    [C38].FormulaR1C1 = "=MOD(R[-2]C,27)"
    [D35].FormulaR1C1 = "=R[2]C[-1]"
    [E5].FormulaR1C1 = "=IF(R[1]C+RC[6]=27,RC[-2]-RC[3]-RC[6],RC[6])"
    [E6:E34].FormulaR1C1 = "=IF(R[1]C+RC[6]=27,RC[-2]-RC[3]-RC[6],R[1]C+RC[6])"
    [E35].FormulaR1C1 = "=RC[-2]-RC[3]"
    [G34].FormulaR1C1 = "=RC[3]-RC[2]"
    [H5:H35].FormulaR1C1 = "=IF(RC[1]="""",RC="""",RC[1]*27)"
    [I5:I34].FormulaR1C1 = "=IF(OR(RC[-6]-RC[2]<27),""0"",QUOTIENT((RC[-6]-RC[2]),27))"
    [I35].FormulaR1C1 = "=IF(OR(RC[-6]<27,RC[-6]=""""),""0"",(QUOTIENT(RC[-6],27)))"
    [J34].FormulaR1C1 = "=R[1]C[-6]"
    [K5:K34].FormulaR1C1 = "=IF(27-R[1]C[-6]>RC[-8],RC[-8]+R[1]C[-6],27-R[1]C[-6])"
 Rem ====================================================================================================

 ▼テキストボックス
 '---------------------------------------------------------------------------------
 > やりたいこと
 >・27個入る空箱へ、powerが強いモノから順番に入れて封をしたい
 >・空箱には口割れ番号を割り当てることで、封をした後でも中身がわかるようにしたい
 >・今後、発注数の縦欄の数字を手動で変えることで、このシートを流用したい
 '---------------------------------------------------------------------------------
 > 困ってること
 >・発注数に0を入力したり
 > 空箱の残空き数よりも発注数が小さくなると
 > 関数が崩れてしまい、正しく計算されない
 >・3種類以上のpowerを1つの空箱に入れる場合の処理
 '---------------------------------------------------------------------------------

 ▼コピペ用タブ区切り

			箱に詰める数							
			先(power混載)		中(power同一)				後(power混載)	
	power	発注数	口割れ番号	個数	口割れ番号(頭)	口割れ番号(尾)	個数	箱数	口割れ番号	個数
	1	20		=IF(E6+K5=27,C5-H5-K5,K5)			=IF(I5="",H5="",I5*27)	=IF(OR(C5-K5<27),"0",QUOTIENT((C5-K5),27))		=IF(27-E6>C5,C5+E6,27-E6)
	2	20		=IF(E7+K6=27,C6-H6-K6,E7+K6)			=IF(I6="",H6="",I6*27)	=IF(OR(C6-K6<27),"0",QUOTIENT((C6-K6),27))		=IF(27-E7>C6,C6+E7,27-E7)
	3	20		=IF(E8+K7=27,C7-H7-K7,E8+K7)			=IF(I7="",H7="",I7*27)	=IF(OR(C7-K7<27),"0",QUOTIENT((C7-K7),27))		=IF(27-E8>C7,C7+E8,27-E8)
	4	0		=IF(E9+K8=27,C8-H8-K8,E9+K8)			=IF(I8="",H8="",I8*27)	=IF(OR(C8-K8<27),"0",QUOTIENT((C8-K8),27))		=IF(27-E9>C8,C8+E9,27-E9)
	5	100		=IF(E10+K9=27,C9-H9-K9,E10+K9)			=IF(I9="",H9="",I9*27)	=IF(OR(C9-K9<27),"0",QUOTIENT((C9-K9),27))		=IF(27-E10>C9,C9+E10,27-E10)
	6	140		=IF(E11+K10=27,C10-H10-K10,E11+K10)			=IF(I10="",H10="",I10*27)	=IF(OR(C10-K10<27),"0",QUOTIENT((C10-K10),27))		=IF(27-E11>C10,C10+E11,27-E11)
	7	180		=IF(E12+K11=27,C11-H11-K11,E12+K11)			=IF(I11="",H11="",I11*27)	=IF(OR(C11-K11<27),"0",QUOTIENT((C11-K11),27))		=IF(27-E12>C11,C11+E12,27-E12)
	8	180		=IF(E13+K12=27,C12-H12-K12,E13+K12)			=IF(I12="",H12="",I12*27)	=IF(OR(C12-K12<27),"0",QUOTIENT((C12-K12),27))		=IF(27-E13>C12,C12+E13,27-E13)
	9	220		=IF(E14+K13=27,C13-H13-K13,E14+K13)			=IF(I13="",H13="",I13*27)	=IF(OR(C13-K13<27),"0",QUOTIENT((C13-K13),27))		=IF(27-E14>C13,C13+E14,27-E14)
	10	230		=IF(E15+K14=27,C14-H14-K14,E15+K14)			=IF(I14="",H14="",I14*27)	=IF(OR(C14-K14<27),"0",QUOTIENT((C14-K14),27))		=IF(27-E15>C14,C14+E15,27-E15)
	11	250		=IF(E16+K15=27,C15-H15-K15,E16+K15)			=IF(I15="",H15="",I15*27)	=IF(OR(C15-K15<27),"0",QUOTIENT((C15-K15),27))		=IF(27-E16>C15,C15+E16,27-E16)
	12	240		=IF(E17+K16=27,C16-H16-K16,E17+K16)			=IF(I16="",H16="",I16*27)	=IF(OR(C16-K16<27),"0",QUOTIENT((C16-K16),27))		=IF(27-E17>C16,C16+E17,27-E17)
	13	280		=IF(E18+K17=27,C17-H17-K17,E18+K17)			=IF(I17="",H17="",I17*27)	=IF(OR(C17-K17<27),"0",QUOTIENT((C17-K17),27))		=IF(27-E18>C17,C17+E18,27-E18)
	14	290		=IF(E19+K18=27,C18-H18-K18,E19+K18)			=IF(I18="",H18="",I18*27)	=IF(OR(C18-K18<27),"0",QUOTIENT((C18-K18),27))		=IF(27-E19>C18,C18+E19,27-E19)
	15	270		=IF(E20+K19=27,C19-H19-K19,E20+K19)			=IF(I19="",H19="",I19*27)	=IF(OR(C19-K19<27),"0",QUOTIENT((C19-K19),27))		=IF(27-E20>C19,C19+E20,27-E20)
	16	230		=IF(E21+K20=27,C20-H20-K20,E21+K20)			=IF(I20="",H20="",I20*27)	=IF(OR(C20-K20<27),"0",QUOTIENT((C20-K20),27))		=IF(27-E21>C20,C20+E21,27-E21)
	17	250		=IF(E22+K21=27,C21-H21-K21,E22+K21)			=IF(I21="",H21="",I21*27)	=IF(OR(C21-K21<27),"0",QUOTIENT((C21-K21),27))		=IF(27-E22>C21,C21+E22,27-E22)
	18	220		=IF(E23+K22=27,C22-H22-K22,E23+K22)			=IF(I22="",H22="",I22*27)	=IF(OR(C22-K22<27),"0",QUOTIENT((C22-K22),27))		=IF(27-E23>C22,C22+E23,27-E23)
	19	1		=IF(E24+K23=27,C23-H23-K23,E24+K23)			=IF(I23="",H23="",I23*27)	=IF(OR(C23-K23<27),"0",QUOTIENT((C23-K23),27))		=IF(27-E24>C23,C23+E24,27-E24)
	20	170		=IF(E25+K24=27,C24-H24-K24,E25+K24)			=IF(I24="",H24="",I24*27)	=IF(OR(C24-K24<27),"0",QUOTIENT((C24-K24),27))		=IF(27-E25>C24,C24+E25,27-E25)
	21	200		=IF(E26+K25=27,C25-H25-K25,E26+K25)			=IF(I25="",H25="",I25*27)	=IF(OR(C25-K25<27),"0",QUOTIENT((C25-K25),27))		=IF(27-E26>C25,C25+E26,27-E26)
	22	160		=IF(E27+K26=27,C26-H26-K26,E27+K26)			=IF(I26="",H26="",I26*27)	=IF(OR(C26-K26<27),"0",QUOTIENT((C26-K26),27))		=IF(27-E27>C26,C26+E27,27-E27)
	23	220		=IF(E28+K27=27,C27-H27-K27,E28+K27)			=IF(I27="",H27="",I27*27)	=IF(OR(C27-K27<27),"0",QUOTIENT((C27-K27),27))		=IF(27-E28>C27,C27+E28,27-E28)
	24	220		=IF(E29+K28=27,C28-H28-K28,E29+K28)			=IF(I28="",H28="",I28*27)	=IF(OR(C28-K28<27),"0",QUOTIENT((C28-K28),27))		=IF(27-E29>C28,C28+E29,27-E29)
	25	180		=IF(E30+K29=27,C29-H29-K29,E30+K29)			=IF(I29="",H29="",I29*27)	=IF(OR(C29-K29<27),"0",QUOTIENT((C29-K29),27))		=IF(27-E30>C29,C29+E30,27-E30)
	26	170		=IF(E31+K30=27,C30-H30-K30,E31+K30)			=IF(I30="",H30="",I30*27)	=IF(OR(C30-K30<27),"0",QUOTIENT((C30-K30),27))		=IF(27-E31>C30,C30+E31,27-E31)
	27	110		=IF(E32+K31=27,C31-H31-K31,E32+K31)			=IF(I31="",H31="",I31*27)	=IF(OR(C31-K31<27),"0",QUOTIENT((C31-K31),27))		=IF(27-E32>C31,C31+E32,27-E32)
	28	80		=IF(E33+K32=27,C32-H32-K32,E33+K32)			=IF(I32="",H32="",I32*27)	=IF(OR(C32-K32<27),"0",QUOTIENT((C32-K32),27))		=IF(27-E33>C32,C32+E33,27-E33)
	29	60		=IF(E34+K33=27,C33-H33-K33,E34+K33)			=IF(I33="",H33="",I33*27)	=IF(OR(C33-K33<27),"0",QUOTIENT((C33-K33),27))		=IF(27-E34>C33,C33+E34,27-E34)
	30	40		=IF(E35+K34=27,C34-H34-K34,E35+K34)		=J34-I34	=IF(I34="",H34="",I34*27)	=IF(OR(C34-K34<27),"0",QUOTIENT((C34-K34),27))	=D35	=IF(27-E35>C34,C34+E35,27-E35)
	31	20	=C37	=C35-H35			=IF(I35="",H35="",I35*27)	=IF(OR(C35<27,C35=""),"0",(QUOTIENT(C35,27)))		
	合計	=SUM(C5:C35)								
	必要な箱の数	=QUOTIENT(C36,27)								
	箱から余った数	=MOD(C36,27)								

(白茶) 2023/11/27(月) 09:24:07



 補足
 > 困ってること
 >・発注数に0を入力したり
 > 空箱の残空き数よりも発注数が小さくなると
 > 関数が崩れてしまい、正しく計算されない
 >・3種類以上のpowerを1つの空箱に入れる場合の処理
 のテキストボックスより問題の箇所(C8、C23、K23)に矢印で示されていました。
(白茶)さんご苦労さんでした。
(IT) 2023/11/27(月) 10:29:17

 >・27個入る空箱へ、powerが強いモノから順番に入れて封をしたい
 意味が分からないです。
 試してみたんですが式の内容がさっぱり理解できませんでした。
(IT) 2023/11/28(火) 12:16:29

 Web版ではないExcelでマクロを使うことを推奨します。
 制約がきつすぎます。
(xyz) 2023/11/28(火) 13:36:56

コメントありがとうございます、説明不足について申し訳ございません
またイメージ図の貼り付け等に感謝いたします

・27個入る空箱へ、powerが強いモノから順番に入れて封をしたい
意味が分からないです。 試してみたんですが式の内容がさっぱり理解できませんでした。

こちらにつきましては、今回の場合ですと、
power31が20個発注されているものとなりまして、まず、この20個を空箱に移し替えるものとなります
20個を入れた空箱には、残り7個入るスペースがあいておりますので、
次のpower30を入れられる分だけこのスペースに入れて、空箱を満杯にしてから封をしたいと思っている次第です

またpower31が27個以上ある場合につきましては、
中(power同一)の欄に、27の倍数事に箱数をカウントをし、溢れた数を 先(power混載)の空箱に送ります

さらに、powerが混載する場合には、
例えば、power31が20個、power30が15個としましたら
先(power混載)の縦欄(横軸power31)に20個
後(power混載)の縦欄(横軸power30)に7個 )
という風にしたい次第です

Web版ではないExcelでマクロを使うことを推奨します。 制約がきつすぎます。

マクロの勉強をしてみます

(den) 2023/11/28(火) 21:30:03


 現在のシートからは離れますが、こういうことでしょうか?
 優先度は1が最高で、上から順に箱に入れていくようにしています。このほうが<私には>自然だと思われました。)

       A列   B     C     D     E     F     G       H     I    J     K     L     M     N     O     P     Q     R     S     T     U     V
  1行  優                (A)一括梱包       (B)端数 番号  1   3     8     25    47    55    87    108   127   145   166   175   176   177
       先                      最初  最後  端数        
       度    個数                    
  2    1     20                            20            20                                                                            
  3    2     40          1     2           13             7   6                                                                       
  4行  3     60          2     4     5     6                  6                                                                       
   以  4     80          2     6     7     26                15    11                                                                
   下  5     110         4     9     12    2                       2                                                                 
   略  6     170         6     13    18    8                       8                                                                 
       7     180         6     19    24    18                      6     12                                                          
       8     220         8     26    33    4                             4                                                           
       9     220         8     34    41    4                             4                                                           
       10    160         5     42    46    25                            7     18                                                    
       11    200         7     48    54    11                                  9     2                                               
       12    170         6     56    61    8                                         8                                               
       13    1                             1                                         1                                               
       14    220         8     62    69    4                                         4                                               
       15    250         9     70    78    7                                         7                                               
       16    230         8     79    86    14                                        5     9                                         
       17    270         10    88    97    0                                                                                         
       18    290         10    98    107   20                                              18    2                                   
       19    280         10    109   118   10                                                    10                                  
       20    240         8     119   126   24                                                    15    9                             
       21    250         9     128   136   7                                                           7                             
       22    230         8     137   144   14                                                          11    3                       
       23    220         8     146   153   4                                                                 4                       
       24    180         6     154   159   18                                                                18                      
       25    180         6     160   165   18                                                                2     16                
       26    140         5     167   171   5                                                                       5                 
       27    100         3     172   174   19                                                                      6     13          
       28    0                             0                                                                                         
       29    20                            20                                                                            14    6     
       30    20                            20                                                                                  20    
 32行  31    20                            20                                                                                  1     19
 33                                                                                                                                    
 34                       163                                                                                                         
 35                      4401                          27    27    27    27    27    27    27    27    27    27    27    27    27    19
 36          4771        4771                                                                                                        

 1. Sheet1に上のA列、B列を配置してください。
 2. 下記のマクロを標準モジュールにコピーしてください。
 3. mainというマクロを実行すると、数値が表示されるはずです。
    ただし、見出し等は手で追加してください。
    また、34行目以降の集計行はマクロでは表示されません。(手抜きです)

 完成品を提示する積りはなく、こうしたことが可能という例を提示することが目的です。

 以下、コードです。

 ==== ここから ====
 Const limit     As Long = 27    '一つの箱に梱包できる材料の個数上限
 Dim ws          As Worksheet
 Dim total()     As Long
 Dim powers()    As Object
 Dim addNums()   As Object
 Dim box1()      As String

 Sub main()
     Dim power&
     Dim curBox&, curBox2&
     Dim kosu&
     Dim bulkBoxes&
     Dim residual&
     Dim lastRow&, k&

     Set ws = Worksheets("Sheet2")

     lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row

     curBox = 1          '一括梱包する現時点の箱の番号
     curBox2 = 1         '端数個を入れる現時点の箱の番号

     Call init(curBox2)  '端数個を入れる場合の情報を設定

     For k = 2 To lastRow
         power = ws.Cells(k, "A")   '優先度
         kosu = ws.Cells(k, "B")    '個数
         If kosu > 0 Then
             If kosu >= limit Then
                 bulkBoxes = Int(kosu / limit)         '27個単位の一括梱包の箱個数
                 Call 一括梱包処理(curBox, curBox2, power, bulkBoxes)
                 residual = kosu Mod limit             '27個未満の部分
                 If residual > 0 Then Call 端数部分処理(curBox, curBox2, power, residual)
             Else
                 Call 端数部分処理(curBox, curBox2, power, kosu)
             End If
         End If
     Next

     Call 結果書き込み

 End Sub

 Sub init(curBox2)
     ReDim Preserve total(1 To curBox2)
     total(curBox2) = 0
     ReDim Preserve powers(1 To curBox2)
     Set powers(curBox2) = CreateObject("System.Collections.ArrayList")
     ReDim Preserve addNums(1 To curBox2)
     Set addNums(curBox2) = CreateObject("System.Collections.ArrayList")
 End Sub

 Sub 端数部分処理(curBox&, curBox2&, power&, residual&)
     Dim capacity As Long                            '梱包可能な余力(個数)
     capacity = limit - total(curBox2)

     If residual < capacity Then
         powers(curBox2).Add power                   'どの"優先度"のものを梱包したか
         addNums(curBox2).Add residual               'その優先度の梱包済み材料の"個数"たち
         total(curBox2) = total(curBox2) + residual  '梱包した材料の"合計個数"
     Else
         powers(curBox2).Add power
         addNums(curBox2).Add capacity
         total(curBox2) = total(curBox2) + capacity

         If residual > capacity Then
             curBox2 = Application.Max(curBox, curBox2) + 1
             Call init(curBox2)
             powers(curBox2).Add power
             addNums(curBox2).Add (residual - capacity)
             total(curBox2) = total(curBox2) + residual - capacity
         End If
     End If
 End Sub

 Sub 一括梱包処理(curBox&, curBox2&, power&, bulkBoxes&)
     Dim p&
     Dim firstBox&, lastBox&

     p = Application.Max(curBox, curBox2)
     firstBox = p + 1
     lastBox = p + bulkBoxes
     curBox = p + bulkBoxes

     'box1:  優先度がpowerの材料を一括梱包した箱の最初と最後( "first,last"の形式)
     ReDim Preserve box1(1 To power)
     box1(power) = firstBox & "," & lastBox
 End Sub

 Sub 結果書き込み()
     Dim k&, j&, p&, ary, ary2

     With ws
         '一括梱包した箱に関する情報
         For k = 1 To UBound(box1)
             If box1(k) <> "" Then
                 ary = Split(box1(k), ",")

                 .Cells(k + 1, "D") = ary(1) - ary(0) + 1 '箱の個数
                 .Cells(k + 1, "E") = ary(0)     '箱番号(最初)
                 If ary(1) <> ary(0) Then
                     .Cells(k + 1, "F") = ary(1) '箱番号(最後)
                 End If
             End If
         Next

         '端数部分を梱包した箱に関する情報
         p = 8
         For k = 1 To UBound(powers)
             If Not powers(k) Is Nothing Then
                 ary = powers(k).Toarray             '箱に梱包された対象の "優先度"たち
                 ary2 = addNums(k).Toarray           '箱に梱包された対象の "個数"たち
                 p = p + 1
                 .Cells(1, p) = k                    ' "箱番号"
                 For j = 0 To UBound(ary)
                     .Cells(ary(j) + 1, p) = ary2(j) ' 優先度の行に"個数"を埋める
                 Next
             End If
         Next
     End With
 End Sub
 ==== ここまで ====
(xyz) 2023/11/29(水) 21:41:31

シートとマクロのご提示ありがとうございます

 現在のシートからは離れますが、こういうことでしょうか?

作成いただいたシートですと、
優先度2を6コ
優先度3を6コ
優先度4を15コ
をすべて、27個入る箱(番号3)に入れるようにされているとお見受けいたしました

こちらの場合ですと、説明が足りないところにご提示まで頂き大変申し訳ないですが、
想定している完成イメージと異なってしまっておりまして、

一括梱包を優先して、27個を空箱へ入れ、余りを別の箱に入れる、のではなく、

前の余りが入っている箱の空きスペースを全て埋めることを優先して個数を消費した次に、
余った個数で可能なら一括梱包をして、余りを次の箱に入れる、としたい所存です

尚、ご提示いただいたコードにつきましてはまだ理解できるスキルを持ち合わせてないため、
少しずつ理解していきたいと思っております。

(den) 2023/12/01(金) 18:12:35


 完成形が今一つクリアにイメージできないですが・・

 (1) D5セル =IF(OR(C5=0,E5=0),"",IF(E5=C5,$C$37-INT(M6/27),MIN(F5:G5,J5)-1))
 (2) E5セル =IF(C5=0,"",MIN(C5-K5,MOD(M5,27)))
 (3) F5セル =IF(C5=0,"",IF(I5>1,G5-I5+1,""))
 (4) G5セル =IF(OR(C5=0,I5=0),"",IF(K5>0,J5-1,$C$37-INT(M6/27)))
 (5) H5セル =IF(C5=0,"",C5-E5-K5)
 (6) I5セル =IF(C5=0,"",H5/27)
 (7) J5セル =IF(OR(C5=0,K5=0),"",$C$37-INT(M6/27))
 (8) K5セル =IF(C5=0,"",IF(MOD(M6,27)=0,0,MIN(C5,27-MOD(M6,27))))
 (9) M5セル =SUM(C5:C$35)
 上記5行目の数式を34行目までコピー

 (10) D35セル =IF(OR(C35=0,E35=0),"",IF(C35=E35,C37,MIN(F35:G35,J35)-1))
 (11) E35セル =IF(C35=0,"",MIN(C35-K35,MOD(M35,27)))
 (12) F35セル =IF(C35=0,"",IF(I35>1,G35-I35+1,""))
 (13) G35セル =IF(OR(C35=0,H35=0),"",C37)
 (14) H35セル =IF(C35=0,"",C35-E35-K35)
 (15) I35セル =IF(C35=0,"",H35/27)
 (16) M35セル =SUM(C35:C$35)

 <最終 シート 結果図>
 行 _______B_______ ___C___ _____D_____ __E__ ________F________ ________G________ __H__ __I__ _____J_____ __K__ _L_ ___M___
  4 power           発注数  口割れ番号  個数  口割れ番号(頭)  口割れ番号(尾)  個数  箱数  口割れ番号  個数      作業列 
  5               1      20           0    19                                         0     0           1     1        4771
  6               2      20                 0                                         0     0           1    20        4751
  7               3      20           1     6                                         0     0           2    14        4731
  8               4       0                                                                                            4711
  9               5     100           2    13                 3                 5    81     3           6     6        4711
 10               6     140           6    21                 7                10   108     4          11    11        4611
 11               7     180          11    16                12                17   162     6          18     2        4471
     : 
 22              18     220         108    15               109               115   189     7         116    16        1851
 23              19       1                 0                                         0     0         116     1        1631
 24              20     170         116    10               117               121   135     5         122    25        1630
      : 
 33              29      60         172    12                                 173    27     1         174    21         120
 34              30      40         174     6                                 175    27     1         176     7          60
 35              31      20         176    20                                         0     0                            20
 36 合計               4771                                                                                                
 37 必要な箱の数        176                                                                                                
 38 箱から余った数       19                                                                                                

(半平太) 2023/12/02(土) 15:34:10


シートと関数のご提示ありがとうございます

早速試してみたところ、こちらのイメージ通りに正常に動作しており感動しています
皆様にご教授頂いた内容には知識不足で理解できていない点が多々ありますが、
シート自体の工夫やマクロの活用など勉強させていただきました

つきましては、こちらのシートを活用させていただきたく思いまして、勝手ではございますが
この度の質問を解消とさせていただきます

誠にありがとうございました

(den) 2023/12/03(日) 21:30:13


コメント返信:

[ 一覧(最新更新順) ]


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