问题:
黄色部分想要做成公式,目前数字是手工输入。
逻辑是依据右侧的 条码 和 退货总数;
在左侧按从上到下的顺序,依据 条码 逐个计算 分配退货,直到 退货总数 分配完毕。
![]()
▼初步分析:
问题中要求 依据 条码 逐个计算 分配退货,这里面涉及到按照条码名称进行查找,很自然联想到Vlookup等公式;
另外要求 直到 退货总数 分配完毕,注意这里退货总数 的分配,涉及到加法计算;初步判断可能用到公式Sumif。
▼编写公式:
1.首先我们需要在左侧的黄色的E3单元格,根据左侧条码号C3,对右侧区域I2:J7进行查找,返回我们感兴趣的退货总数,我们将会用到Vlookup,公式如下:
=VLOOKUP(C3,I2:J7,2)
注意,以上为单元格E3内公式,表示使用Vlookup,根据C3单元格,对I2:J7范围内进行查找;如果在I2:J7范围内找到C3单元格内容(假设为I3单元格),则返回I2:J7范围内对应行的第二列(即返回J3)。以下为公式效果:

2.我们还在黄色的E3单元格,根据C3条码号,计算左侧已经分配退货的数量之和;然后将第一步得到的 退货总数 减去 分配退货的数量之和,得到差值:
=VLOOKUP(C3,I2:J7,2)-SUMIF(C2:C3,C3,D2:D3)
注意,减号右侧表示在C2:C3范围内,查找与C3相同的值;如果查到相同值,把D2:D3范围内对应的数值进行求和。以下为公式效果:

3.选择E3单元格,拖拽右下角,复制公式:

发现在复制公式时候,出错了。检查发现我们需要对公式加一些修饰($),使拖拽时候被修饰的行列保持不变(也可以在公式中选择需要加修饰的部分代码,循环按F4快捷键)。
=VLOOKUP(C3,$I$2:$J$7,2)-SUMIF($C$2:C3,C3,$D$2:D3)
效果立竿见影:

4.分析我们目前E列的结果,如果结果大于0,代表可以按照D列数量进行退货;如果小于0,当与D列相加大于0,可以按照与D列求和的数量进行退货。
可以在F列写下公式:
=IF(E3>0,D3,IF(E3+D3>0,E3+D3,0))

5.到此基本得到我们需要的结果。将F列与E列内容对调,即为所要求的结果:

▼总结:
通过Vlookup配合sumif基本解决提出的问题;
需要对公式加一些修饰($),使拖拽时候被修饰的行列保持不变;
可以在公式中选择需要加修饰的部分代码,循环按F4快捷键,直到合适的修饰;
美中不足是使用了中间值F列进行计算,稍显累赘,读者可以自行尝试写成一个公式。
网友评论