我最近开始了解 Excel 的 Ctrl+Shift+Enter 数组公式,目前仍在学习它们。来到我的问题,

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 上 Vlookup,获取代码 19875
  • 在 SheetB 上执行 vlookup,得到 40 的缩进
  • 在 Sheet A 下一次 Vlookup,获取代码 13575
  • 使用 13575 在 SheetB 上进行 Vlookup,获得 22
  • 的缩进
  • 在 Sheet A 下一次 Vlookup,获取代码 35675
  • 使用 35675 在 SheetB 上进行 Vlookup,得到 25
  • 的缩进
  • 40+22+25 的总和,返回 87

  • 我可以通过 VBA 实现这一点,但我想知道这是否可以在使用 CSE/数组公式的 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}
    

    比赛决定为
    {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))}
    

    关于Excel - 递归 VLookup,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5496952/

    10-12 03:48