2011-03-31 199 views
3

我最近才知道关于Ctrl + Shift +输入Excel的数组公式,并且目前仍在学习它们。回到我的问题,Excel - 递归VLookup

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

  • VLOOKUP的希达,得到的代码19875
  • 上SheetB执行VLOOKUP,获取40
  • 下一页VLOOKUP对表A中的缩进,获取码13575
  • 使用13575至VLOOKUP上SheetB,在手册A获取22
  • 接着VLOOKUP的缩进,获取的代码35675
  • 使用35675至VLO okup上SheetB,得到25缩进
  • 总和的40 + 22 + 25,返回87

我可以通过VBA实现这一点,但我不知道这是否使用CSE /阵列Excel函数内是可能的公式。

编辑:

我没有在Sheet2中值在Sheet1的顺序相同。他们是完全随机的。我SheetB将是随机的东西像下面:

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

回答

7
{=SUM(NOT(ISNA(MATCH((($A$2:$A$6="S1")*(B2:B6)),Sheet2!$A$2:$A$6,FALSE)))*(Sheet2!$B$2:$B$6))} 

本场比赛的第一个参数解析为

{19875;0;13575;35675;0} 

比赛解析

{1;#N/A;3;4;#N/A} 

你必须确保你没有零的SheetB。未ISNA原来那些为TRUEs和FALSEs并且解决

{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))} 
+0

@Kusleika,谢谢你的时间。你的解决方案工作得很好,当我在Sheet2中的代码以Sheet1的相同顺序时......但这不是我的实际数据的情况....在输入示例时,我没有考虑这个,只是键入一些随机例。有什么方法可以计算何时不确定Sheet2的顺序? – Ashok 2011-04-01 05:43:42

+0

是的,这就是我最后做的。我不想用这种方式,但是我将额外的列插入SheetA本身并使用SUM(IF('Data-SKUs'!$ B:$ B = $ A9,'Data-SKUs'!$ G:$ G *' Data-SKUs'!J:J,0)。再次感谢你的时间D. – Ashok 2011-04-02 04:22:34

0

如果代码列是相同的两个希达和SheetB(顺序相同),一个简单的SUMIF函数会做。同样,如果INDENT数据在SheetA上,也可以使用数据透视表快速计算总和。

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

0

在sheetC 如果A1具有S1然后在细胞B1型

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

阵列输入 凡上希达代码 代码1 =动态范围开始从行2 代码2 =从第2行开始的SheetB上的代码的动态范围

0

不需要TRANSPOSE调用。

尝试阵列式

= SUM(SUMIF(SheetB!A2:A6,IF(希达!A2:A6 = “S1”,希达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 !.

0

你可以使用以下: //Ola.S

表1 山口:ABC 产品编号Intendent

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

表2 山口:EF 代码Intendent

表3 数据透视表(西:A和C)