3

我最近开始了解 Excel 的 Ctrl+Shift+Enter 数组公式,目前仍在学习它们。来到我的问题,

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 的总缩进量,

  • 在 SheetA 上查找 Vlookup,获取代码 19875
  • 在 SheetB 上执行 vlookup,得到 40 的缩进
  • Next 在工作表 A 上查找 Vlookup,获取代码 13575
  • 使用 13575 在 SheetB 上进行 Vlookup,获得 22 的缩进
  • Next 在工作表 A 上查找 Vlookup,获取代码 35675
  • 使用 35675 在 SheetB 上进行 Vlookup,缩进 25
  • 40+22+25之和,返回87

我可以通过 VBA 实现这一点,但我想知道这是否可以在使用 CSE/数组公式的 excel 函数中实现。

编辑:

我在 Sheet2 中没有与 Sheet1 相同顺序的值。它们是完全随机的。我的 SheetB 将随机如下所示:

SheetB:
Code           Indent
19834          40  
19875          15
47875          22
13575          25
35675          20
4

5 回答 5

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))}
于 2011-03-31T18:41:32.110 回答
0

您可以使用以下内容://Ola.S

表 1 Col:ABC 产品代码意图

C 栏:=SUMIF($E$4:$E$8;B4;$F$4:$F$8)

表 2 Col:EF 代码意图

表 3 可旋转(Col:A 和 C)

于 2011-04-05T21:05:31.357 回答
0

在 sheetC 上,如果 A1 有 S1,那么在单元格 B1 中输入

=SUM((IF((Product=A1),Code1)=TRANSPOSE(Code2))*TRANSPOSE(Amt))

输入的数组 其中 Code1 = SheetA 上从 Row2 开始的代码的动态范围 Code2 = SheetB 上从 Row2 开始的代码的动态范围

于 2011-04-04T02:38:42.983 回答
0

无需TRANSPOSE通话。

试试数组公式

=SUM(SUMIF(SheetB!A2:A6,IF(SheetA!A2:A6="S1",SheetA!B2:B6),SheetB!B2:B6))

假设其中没有单元格SheetB!A2:A6评估为 FALSE。如果代码列都是数字的(可能是一个有问题的假设),这可以在没有数组条目的情况下使用:

=SUMPRODUCT(SUMIF(SheetB!A2:A6,SheetA!B2:B6/(SheetA!A2:A6="S1"),SheetB!B2:B6))

假设没有单元格SheetB!A2:A6计算为#DIV/0!

于 2011-04-04T19:41:13.460 回答
0

如果 SheetA 和 SheetB 上的 Code 列相同(相同顺序),则可以使用简单的 SUMIF 函数。同样,如果 INDENT 数据在 SheetA 上,您也可以使用数据透视表快速计算总和。

我猜你的工作簿的设计不会允许这样做。在这种情况下,我没有任何简单的解决方案,但我会再看一下。

于 2011-03-31T14:44:08.177 回答