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范围