Excel – recursionVLookup

我最近才知道有关Ctrl + Shift + Enter的数组公式,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的总缩进,

  • 在SheetA上查找,获取代码19875
  • 在SheetB上执行vlookup,获取40的缩进
  • 在表单A上查找下一个Vlookup,获取代码13575
  • 在SheetB上使用13575来查找,获取22的缩进
  • 在表单A上查找下一个Vlookup,获取代码35675
  • 在SheetB上使用35675进行Vlookup,得到25的缩进
  • 总和40 + 22 + 25,回报87

我可以通过VBA实现这一点,但我想知道如果这是可能的Excel函数使用CSE /数组公式。

编辑:

我没有Sheet1中的值Sheet1的顺序。他们是完全随机的。 我的SheetB会随机的像下面这样:

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

 {=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中没有零。 非ISNA将其转换为TRUE和FALSE并解决

 {TRUE;FALSE;TRUE;TRUE;FALSE} 

最后的SUM看起来像这样

 =SUM({TRUE;FALSE;TRUE;TRUE;FALSE}*{40;15;22;25;20}) 

更新

当列表的顺序不同时,我无法弄清楚单个数组的解决scheme。 我尝试使用OFFSET和TRANSPOSE或者给出了错误的答案或者Excel崩溃。 如果您可以使用助手列,您可以将此公式放在第一张表的第三列

 =VLOOKUP(B2,Sheet2!$A$2:$B$6,2,FALSE) 

然后用这个数组公式来进行总结

 {=SUM(($A$2:$A$6=A2)*($C$2:$C$6))} 

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

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

不需要TRANSPOSE呼叫。

尝试数组公式

= SUM(SUMIF(SheetB!A2:A6,IF(希达!A2:A6 = “S1”,希达B2:!B6),SheetB B2:!B6))

假设SheetB中没有单元格!A2:A6的计算结果为FALSE。 如果代码列都是数字(可能是一个值得怀疑的假设),那么可以不使用数组input来完成

= SUMPRODUCT(SUMIF(SheetB!A2:A6,希达!B2:B6 /(希达!A2:A6 = “S1”),SheetB B2:!B6))

假设SheetB中没有单元格!A2:A6的计算结果为#DIV / 0 !.

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

表1:ABC产品代码入口

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

表2列出了EF代码

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

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

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

数组input位置Code1 = Sheet2上从第二行开始的代码的dynamic范围Code2 = Sheet2上从第二行开始的代码的dynamic范围