Excel 公式根据条件对数组公式左侧列的值求和

Excel 公式根据条件对数组公式左侧列的值求和

我有一排如下的内容: |52|52|52|_|_|_|_|_|13|B|_|_|_|_|_|24|C|_|_|_|_|_|18|B|_|_|_|_|_|16|A|

垂直线代表列,下划线代表空白单元格。

我想对所有“B”值单元格之前的单元格中的数字求和(即示例中的 13 和 18)

我无法更改行或添加辅助列,因此在这方面我的能力有限。我以为我可以使用数组公式来做到这一点,但它并没有像我预期的那样工作。

我的数组公式目前是:
{=SUM(IF(Table1[#Totals]="B*",INDEX(Table1[#Totals],1,COLUMN(Table1[#Totals])-1),0))}

我也尝试过:
{=SUM(IF(Table1[#Totals]="B*",OFFSET(Table1[#Totals],0,-1),0))}

偏移版本仅返回一个充满 !REF 错误的数组。

当前的 INDEX 公式几乎可以正常工作 - 当我逐步执行它时,我看到它为 IF 条件生成了一个充满“TRUE”和“FALSE”匹配的数组,并且它为 INDEX 部分生成了一个充满“0”和字母“B”的数组,但是,我需要单元格中的值字母“B”,而不是字母“B”本身,我有点不明白为什么该COLUMN(Table1[#Totals])-1部分没有给我这个。

当我逐步执行公式时,我发现它COLUMN(Table1[#Totals])-1只是简单地评估步骤1-1=0,因此偏移了 0 个单元格,这不是我所期望的。

如果能提供任何帮助让 -1 列偏移量正常工作,我将非常感激,因为我现在很困惑。

答案1

假设:

  • 您的样本数据在范围内A1:AE1
  • 样本数据中的数字实际上是真实数字,而不是文本。

您可以使用:

=SUMPRODUCT(--(B1:AE1="B"),A1:AD1)

您应该能够使用这两个不同的范围,SUMPRODUCT因为您的“B”值始终位于第二个范围右侧的一个单元格。根据您的数据更改范围。

另请注意,OFFSET它是易失性的,会在任何工作表重新计算、保存甚至打开工作簿时重新计算。

答案2

经过一番尝试后,我发现偏移函数引发了一个错误,因为表从“A”列(第一列)开始,所以 -1 列偏移的结果是 REF!错误。

我使用偏移函数实现了这个功能,只需在表格前插入一个空白列(因此移动表格使其从 B 列开始)。

然而,JvdV 提供了一个不使用偏移的答案,我认为这总体上是一个更好的解决方案,所以我接受了它作为答案。

相关内容