Excel - 递归VLookup

我最近了解了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, 在SheetA上查找Vlookup,获取代码19875 在SheetB上执行vlookup,获得40的缩进 在表A上的下一个Vlookup,获取代码13575 在SheetB上使用13575到Vlookup,获得22的缩进 在表A上的下一个Vlookup,获取代码35675 在SheetB上使用35675到Vlookup,得到缩进25 总和40 + 22 + 25,返回87 我可以通过VBA实现这一点,但我想知道在使用CSE / Array公式的excel函数中是否可行。 编辑: Sheet2中的值与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中没有零。 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))}
    
如果SheetA和SheetB上的Code列相同(相同的顺序),则可以使用简单的SUMIF函数。同样,如果INDENT数据在SheetA上,您还可以使用数据透视表快速计算总和。 我猜你的工作簿设计不会允许这样做。在这种情况下,我没有任何简单的解决方案,但我会再看看。     
无需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!。     
您可以使用以下内容: //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)     
在sheetC上 如果A1有S1,那么在Cell B1类型中
=SUM((IF((Product=A1),Code1)=TRANSPOSE(Code2))*TRANSPOSE(Amt))
数组已输入 哪里 Code1 = SheetA上的代码的动态范围,从Row2开始 Code2 =从Row2开始的SheetB上的代码的动态范围     

要回复问题请先登录注册