2026年再谈装箱问题的巧妙解法
很久之前我们分享过相关的装箱问题,但是那时候新函数刚出,解法有限,现在函数丰富,我们再谈装箱!
▍需求说明
按照A列的规格把C列数量进行装箱处理,不足一箱的算一箱,结果参考E:F列!
▍核心思路
问题的核心就是把一个数量,按照规格拆分出对应的箱数,对应的工作表中就是多少行,首先想到的应该是 除+余数,这个之前我们已经写过
还有另外一种思路,在数量少于百万行,我们可以使用SEQUENCE函数
拆分成对应数量的1,然后再按数量分组聚合!
比如这样,如何数量是22,要求5个一箱,那么使用公式效果大体如下!
然后再通过BYROW函数,计算每一行的数值个数即可!这样的结果完全符合预期,核心问题也就是迎刃而解了!
▍实战解题
=REDUCE(B2:C2,C3:C5,LAMBDA(x,y,VSTACK(x,
IF({1,0},OFFSET(y,,-1),
BYROW(WRAPROWS(SEQUENCE(y),OFFSET(y,,-2)),COUNT)))
)
)
核心思考搞懂,问题就比较简单的。除了核心的部分,这里还有一个经常使用的数组广播对齐机制!
简单来说,IF二三参数一个是数组,一个是单值的情况,单值会自动和数组对齐并填充!这也是高手常用技巧了!
▍番外-Py解法
Excel支持Python已经好久了,部分问题,如果Excel写觉得麻烦,你又懂Python的,这种基础的可以基础现在的AI使用Python处理!
df = xl("A2:C5", headers=True)
df['数量'] = df.apply(
lambda r: [r['箱规']] * (r['数量'] // r['箱规']) +
([r['数量'] % r['箱规']] ifr['数量'] % r['箱规'] else []), axis=1
)
df'产品名称', '数量'.explode('数量').reset_index(drop=True)