我最近了解了Ctrl + Shift +输入Excel的数组公式,目前仍在学习它们。来我的问题,
SheetA:
Product Code
S1 19875
S2 19834
S1 13575
S1 35675
S2 47875
SheetB:
Code Indent
19875 40
19834 15
13575 22
35675 25
47875 20
我需要对给定产品名称的所有缩进进行求和。
例如:我需要S1的Total Indent,
我可以通过VBA实现这一点,但我想知道在使用CSE / Array公式的excel函数中是否可行。
编辑:
Sheet2中的值与Sheet1的顺序不同。它们是完全随机的。我的SheetB将是随机的,如下所示:
SheetB:
Code Indent
19834 40
19875 15
47875 22
13575 25
35675 20
答案 0 :(得分:7)
{=SUM(NOT(ISNA(MATCH((($A$2:$A$6="S1")*(B2:B6)),Sheet2!$A$2:$A$6,FALSE)))*(Sheet2!$B$2:$B$6))}
MATCH的第一个参数解析为
{19875;0;13575;35675;0}
MATCH解析为
{1;#N/A;3;4;#N/A}
您必须确保SheetB中没有零。 NOT ISNA将这些转换为TRUE和FALSE并解析为
{TRUE;FALSE;TRUE;TRUE;FALSE}
最终的SUM看起来像这样
=SUM({TRUE;FALSE;TRUE;TRUE;FALSE}*{40;15;22;25;20})
<强>更新强>
当列表的顺序不同时,我无法找出单阵列解决方案。我对OFFSET和TRANSPOSE的尝试给出了错误的答案或崩溃的Excel。如果您可以使用辅助列,则可以将此公式放在第一张表的第三列
中=VLOOKUP(B2,Sheet2!$A$2:$B$6,2,FALSE)
然后使用此数组公式来总结它们
{=SUM(($A$2:$A$6=A2)*($C$2:$C$6))}
答案 1 :(得分:0)
如果SheetA和SheetB上的Code列相同(相同的顺序),则可以使用简单的SUMIF函数。同样,如果INDENT数据在SheetA上,您还可以使用数据透视表快速计算总和。
我猜你的工作簿的设计不会允许这样做。在这种情况下,我没有任何简单的解决方案,但我会再看看。
答案 2 :(得分:0)
在sheetC上 如果A1有S1,则在Cell B1类型
=SUM((IF((Product=A1),Code1)=TRANSPOSE(Code2))*TRANSPOSE(Amt))
输入数组 哪里 Code1 = SheetA上的代码的动态范围,从Row2开始 Code2 =从Row2开始的SheetB上代码的动态范围
答案 3 :(得分:0)
不需要TRANSPOSE通话。
尝试数组公式
= SUM(SUMIF(SheetB!A2:A6,IF(希达!A2:A6 = “S1”,希达B2:!B6),SheetB B2:!B6))
假设SheetB中没有单元格!A2:A6的计算结果为FALSE。如果Code列都是数字(可能是一个值得怀疑的假设),那么可以使用
进行数组输入= SUMPRODUCT(SUMIF(SheetB!A2:A6,希达!B2:B6 /(希达!A2:A6 = “S1”),SheetB B2:!B6))
假设SheetB中没有单元格!A2:A6的计算结果为#DIV / 0!
答案 4 :(得分:0)
您可以使用以下内容: //Ola.S
表1 Col:A B C. 产品代码注册
Col C:= SUMIF($ E $ 4:$ E $ 8; B4; $ F $ 4:$ F $ 8)
表2 上校:E F. Code Intendent
表3 数据透视(上校:A和C)