Excel - 递归VLookup

时间:2011-03-31 08:15:32

标签: 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

我需要对给定产品名称的所有缩进进行求和。

例如:我需要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

5 个答案:

答案 0 :(得分:7)

{=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))}

答案 1 :(得分:0)

如果SheetA和SheetB上的Code列相同(相同的顺序),则可以使用简单的SUMIF函数。同样,如果INDENT数据在SheetA上,您还可以使用数据透视表快速计算总和。

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

答案 2 :(得分:0)

在sheetC上 如果A1有S1,则在Cell B1类型

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

输入数组 哪里 Code1 = SheetA上的代码的动态范围,从Row2开始 Code2 =从Row2开始的SheetB上代码的动态范围

答案 3 :(得分:0)

不需要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!

答案 4 :(得分: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)