我有一个文件,其中一列显示产品,另一列显示每种产品的数量。
CONCATENATE
我正在尝试根据产品的累计数量创建产品分组列表 ( )。在我的源数据中,每种产品都显示在 B 列中,而 E 列中则显示其数量。
我想要创建的列表从第 385 行开始,我已经在 C 列中对每个项目进行了编号。因此,列表中的第一个项目在单元格 C385 中标记为“1”。我想要的结果是,一旦我的数据列 B 中的累计金额超过结果中的列表编号,我就可以CONCATENATE
从源数据的 B 列中找到一组这些产品的名称。
例如,如果单元格 E286 中列表的累计值为 4,则结果列表的前 4 行应填充。我有一个可行的公式来实现这一点,如下所示:
=(IF(ROUND(SUM($E$283),0)>=C385,(CONCATENATE($B$281,$B$282,$B$283))," ")&(IF(ROUND(SUM($E$283:$E$284),0)>=C385,(CONCATENATE($B$281,$B$282,$B$284))," ")&IF(ROUND(SUM($E$283:$E$285),0)>=C385,(CONCATENATE($B$281,$B$282,$B$285))," ")&IF(ROUND(SUM($E$283:$E$286),0)>=C385,(CONCATENATE($B$281,$B$282,$B$286))," ")))))
采用以下不同格式来显示嵌套:
=(
IF(
ROUND(SUM($E$283),0)>=C385
,(CONCATENATE($B$281,$B$282,$B$283))
," ")
&(
IF(
ROUND(SUM($E$283:$E$284),0)>=C385
,(CONCATENATE($B$281,$B$282,$B$284))
," ")
&IF(
ROUND(SUM($E$283:$E$285),0)>=C385
,(CONCATENATE($B$281,$B$282,$B$285))," ")
&IF(
ROUND(SUM($E$283:$E$286),0)>=C385
,(CONCATENATE($B$281,$B$282,$B$286))
," ")
)
)
))
但是,由于列表很长,因此需要太多嵌套的 IF 函数。我听说过使用 CHOOSE 函数和布尔表达式来实现这样的结果。我尝试将我的公式转换为下面的选项,但恐怕我不完全理解这个公式,特别是“错误”组件。有人能指出我下面的错误之处吗,或者更好地建议一种替代解决方案来实现我的目标?
=CHOOSE(1+(ROUND(SUM($E$283),0)>=C385*1+(ROUND(SUM($E$283:$E$284),0)>=C385*2+(ROUND(SUM($E$283:$E$285),0)>=C385*3+(ROUND(SUM($E$283:$E$286),0)>=C385*4,"Error",(CONCATENATE($B$281,$B$282,$B$283)),(CONCATENATE($B$281,$B$282,$B$284)),(CONCATENATE($B$281,$B$282,$B$285)),(CONCATENATE($B$281,$B$282,$B$286)))
显示嵌套的另一种格式是:
=CHOOSE(
1
+(ROUND(SUM($E$283),0)>=C385*1
+(ROUND(SUM($E$283:$E$284),0)>=C385*2
+(ROUND(SUM($E$283:$E$285),0)>=C385*3
+
(
ROUND(SUM($E$283:$E$286),0)>=C385*4
,"Error"
,(CONCATENATE($B$281,$B$282,$B$283))
,(CONCATENATE($B$281,$B$282,$B$284))
,(CONCATENATE($B$281,$B$282,$B$285))
,(CONCATENATE($B$281,$B$282,$B$286))
)