我有一个相当简单的 Excel 2007 工作表,其中包含三列;名称(A 列)、Value1(B 列)和 Value2(C 列)。此工作表通常会按名称列自动过滤。
在第二列的底部,我想执行 B 列的条件小计,遵守任何过滤器,遵循以下规则:如果给定的行 B 列为 0,则使用 C 列中该行的值,否则,应忽略 C 列。
A B C
1 Name Value1 Value2
2 Bob 100 6 <-- use 100, ignore 6 in Col C because B is non-zero
3 Bob 200 <-- use 200
4 Bob 0 50 <-- Col B=0, use C, thus 50 (and so on)
5 Bob 300
6 Ralph 10
7 Ralph 20 1 <-- use 20 from col B, ignore col 6.
8 Ralph 0 60
9 Ralph 50
10 Mary 1000
11 Mary 1200
12 Mary 0 250
13 Mary 1040
14 Subtotal 4280
现在,我可以用公式得到我想要的总值:
=SUMPRODUCT(--(B2:B13=0),C2:C13)+小计(9,B2:B13)
但是使用 SUMPRODUCT 会阻止它满足隐藏/过滤单元格的要求,例如过滤掉 Mary 不会导致总数下降 3690。并且 SUBTOTAL 不能使用 (B2:B13=0) 数组引用。所以我大脑的一个很好的部分试图告诉我我可以接近,但真的无法到达那里。但我(也是?)固执地放弃了这么快:)
我的一部分试图说如果不深入研究 VBA 就无法直接完成,如果可能的话,我希望避免这种解决方案。我认为值得就这个问题征求其他一些人的意见,以便指出一个我只是看不到的(可能非常简单的)解决方案。
编辑 1:我应该指出的一个明显的解决方案是简单地添加带有简单 IF 表达式的第四列,然后 SUBTOTAL 。这当然有效,但我无法适应这种情况。此处所示的表格只是从更大的、高度结构化的工作表中提取的代表性摘录,因此不能选择添加任意列。
编辑 2:我提供的示例数据允许一个简单的推断,即所有列的直接小计将解决问题,但从中提取此数据的实际数据可能包括 C 列的值,即使 B 列是非零。在这种情况下,必须忽略 C 列 - B 列(如果存在)总是胜过。我已经相应地修改了原始数据表。