我有一排如下的内容:
|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 提供了一个不使用偏移的答案,我认为这总体上是一个更好的解决方案,所以我接受了它作为答案。