我正在开发一个库存补充工具。如果E列显示领料,而A列中的条形码重复,则单元格值(仓库库存)应从C列中减1,否则C列中的WH库存值相同。请查找所附屏幕截图:

我尝试过的公式,IF(E3="PICK",IF(COUNTIF($A$3:$A$9,$A3)>1,C3-E3=(A1),C3))
发布于 2021-02-01 05:03:47
这是一个嵌套的IF公式,必须使用Ctrl+ Shift + Enter确认。此外,您不希望使用整个列引用,而是使用具有定义的行号的引用,否则工作簿将变得非常慢。
=IF(E3="PICK",IF(COUNTIF($A$3:$A3,$A3)>1,MIN(IF($A$2:A2=A3,$D$2:$D2))-1,IF(COUNTIF($A$3:$A3,$A3)=1,C3-1)),MIN(IF($A$2:A2=A3,$D$2:$D2)))请注意引用中$符号的位置。范围引用的第一行将在行号前面有一个$符号,如$D$2,因此范围始终从第2行开始。但是范围的结束是可变的,这取决于当前行,并且行号前面没有$符号。这样,您就可以根据当前行上方的行中的值进行计算。
让我们来分析一下。
当E列中的单元格为"Pick“时,该公式计算当前行上方和包含的多少行的代码与当前行相同。如果大于1,我们有一个重复的代码,所以公式将使用D列中具有相同区号的行的最小值,然后减1。
但是,如果这是区号第一次出现,该公式将从同一行的C列中提取库存值并减去1。
它处理E列中"Pick“值的所有可能性。
如果E列不是"pick",那么我们只需要D列上面的行的最小值,其中区号与A列相同。
如果你有Office365,你可以使用MinIFS函数而不是Min( If ())构造,并且你不需要使用Ctrl + Shift + Enter (即使你使用第一个公式)。
=IF(E7="PICK",IF(COUNTIF($A$3:$A7,$A7)>1,MINIFS($D$2:D6,$A$2:$A6,A7)-1,IF(COUNTIF($A$3:$A7,$A7)=1,C7-1)),MINIFS($D$2:D6,$A$2:$A6,A7))

严格地说,如果区号是第一次出现,那么您不需要最里面的嵌套,但当公式在您的脑海中不再新鲜时,它有助于理解业务逻辑。您可以将其缩短为此(Office 365版本)
=IF(E3="PICK",
IF(COUNTIF($A$3:$A3,$A3)>1,
MINIFS($D$2:D2,$A$2:$A2,A3)-1,
C3-1),
MINIFS($D$2:D2,$A$2:$A2,A3))https://stackoverflow.com/questions/65983841
复制相似问题