我有这样的付款表:
account | amount
--------+-------
101 | 3
101 | 5
102 | 7
103 | 9
我把这个表的范围命名为“付款”。我把它的第一列称为“账户”。我把它的第二列称为“金额”。
我还有另一个将帐户分配给各组的表:
account | group
--------+-------
101 | 1
102 | 1
103 | 2
我将该表的范围命名为“组”。
现在我想仅使用一个公式来汇总第 1 组帐户的所有付款,而不使用任何其他列。我尝试使用这样的数组公式来做到这一点:
sum(if(vlookup(accounts,groups,2,false)=1,amounts,0))
我也尝试过这样的数组公式:
sumif(if(vlookup(accounts,groups,2,false)=1,amounts,0))
这些公式不起作用。我想我知道原因了——似乎vlookup
函数在一个单元格数组公式中使用时不返回数组。
那么,如何使用一个公式来计算它?
答案1
大约 7 年后,我VLOOKUP()
使用一个数组公式找到了解决方案:)
具有整列的公式需要IFERROR(VLOOKUP();0)
构造来处理标题,否则 SUM 将返回错误#VALUE
。
A B C D E F G H
+—————————+———————+———+—————————+———————+———+———————+————————————————
1 | account | group | | account | group | | group | total amount
|---------+-------+---+---------+-------+---+-------+----------------
2 | 101 | 1 | | 101 | 1 | | 1 | {FORMULA HERE}
3 | 102 | 1 | | 102 | 1 | | |
4 | 103 | 2 | | 103 | 2 | | |
{FORMULA HERE}
en-us
=SUM(IF(IFERROR(VLOOKUP(N(IF({1},$A:$A)),$D:$E,2,0),0)=$G$2,$B:$B,0))
fr-fr
=SOMME(SI(SIERREUR(RECHERCHEV(N(SI({1};$A:$A));$D:$E;2;0);0)=$G$2;$B:$B;0))
CTRL使用++验证数组SHIFT公式ENTER
答案2
在我看来,您可以使用以下公式实现您想要的结果:
=SUMPRODUCT(B1:B4*(LOOKUP(A1:A4,C1:C3,D1:D3)=1))
指=1
的是您要查找其帐户的组号。请注意,这是一个常规公式,而不是数组公式。
我使用常规单元格引用而不是命名区域,因为我认为这可以更容易地将公式与 XLS 表关联起来。
以下屏幕截图显示了不同值的位置,并包含一个稍微更通用的公式,您可以通过拖动单元格的右下角使用该公式对不同的组执行相同的计算F1
。
如果您要坚持使用名称,则必须为具有帐户的列引入不同的名称。公式如下所示:
=SUMPRODUCT(Payments*(LOOKUP(Accounts1,Accounts2,Groups)=1))
为了完整起见,请查看如何在 Excel 中使用 LOOKUP 函数了解可使用的条件LOOKUP
。
答案3
是的,您说得对,VLOOKUP
不会返回数组,因此您需要另一种方法。假设第一列组名为accounts2
,第二列为,numbers
然后尝试此数组公式,
=SUM(IF(ISNUMBER(MATCH(accounts,IF(numbers=1,accounts2),0)),amounts))
使用CTRL++确认SHIFTENTER