首页 > 解决方案 > 跨行求和并计算小于 0 的行数

问题描述

我正在尝试确定每家商店的库存短缺情况以及我供应的面包类型。

示例表显示了商店对每种面包的需求。

在此处输入图像描述

第 8 行是我试图用一个公式来完成的。
根据手头的数量,我可以有条件地格式化以根据短缺突出显示红色或绿色的单元格。
我无法获得计算红细胞数量的公式。

我想我需要使用 sumproduct。

=SUMPRODUCT(--($B9:$B11<C9:C11))

以上用于识别商店 A 的短缺(C 列)。但是,当拖到 D 和 E 列时,它不记得其他商店需要什么。

如果不添加范围内的所有行,我无法将行求和。我需要将每一行单独与手头的数量进行比较。我假设需要使用一个数组。

标签: arraysexcelvbaexcel-formula

解决方案


这是我提到的公式。它使用 mmult 的标准方法来获取矩阵的行总数,然后将它们与可用的数量进行比较:

=SUM(--($B9:$B11<MMULT($C9:C11,TRANSPOSE(COLUMN($C9:C11)^0))))

进入C8并拉过。必须使用数组公式输入CtrlShiftEnter

在此处输入图像描述

编辑

OP 评论说,如果商店不需要特定商品,即使该商品的库存已经用完,也不应该将其列为短缺。

因此,仅当当前列在特定行中的数字 > 0 并且行总和大于可用数量时,才应该有一个额外的条件才能将其注册为短缺:

=SUM((C9:C11>0)*($B9:$B11<MMULT($C9:C11,TRANSPOSE(COLUMN($C9:C11)^0))))

如果您也只想选择一些行,它看起来像

=SUM(ISNUMBER(MATCH($A9:$A11,{"Wheat","Rye"},0))*(C9:C11>0)*($B9:$B11<MMULT($C9:C11,TRANSPOSE(COLUMN($C9:C11)^0))))

推荐阅读