Excel - 递归VLookup

Ash*_*hok 3 excel excel-2007 worksheet-function 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
Run Code Online (Sandbox Code Playgroud)

我需要做一个给定产品名称的所有缩进的总和.

例如:我需要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
Run Code Online (Sandbox Code Playgroud)

Dic*_*ika 7

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

MATCH的第一个参数解决了

{19875;0;13575;35675;0}
Run Code Online (Sandbox Code Playgroud)

MATCH解决了

{1;#N/A;3;4;#N/A}
Run Code Online (Sandbox Code Playgroud)

你必须确保SheetB中没有零.NOT ISNA将这些转换为TRUE和FALSE并解析为

{TRUE;FALSE;TRUE;TRUE;FALSE}
Run Code Online (Sandbox Code Playgroud)

最终的SUM看起来像这样

=SUM({TRUE;FALSE;TRUE;TRUE;FALSE}*{40;15;22;25;20})
Run Code Online (Sandbox Code Playgroud)

更新

当列表的顺序不同时,我无法找出单阵列解决方案.我对OFFSET和TRANSPOSE的尝试给出了错误的答案或崩溃的Excel.如果您可以使用辅助列,则可以将此公式放在第一张表的第三列中

=VLOOKUP(B2,Sheet2!$A$2:$B$6,2,FALSE)
Run Code Online (Sandbox Code Playgroud)

然后使用此数组公式来总结它们

{=SUM(($A$2:$A$6=A2)*($C$2:$C$6))}
Run Code Online (Sandbox Code Playgroud)