【问题标题】:Use value in cell as index for row in Excel SUM function使用单元格中的值作为 Excel SUM 函数中行的索引
【发布时间】:2015-10-25 04:58:00
【问题描述】:

鉴于下面的两个工作表,我想在 F 列中为每一行添加一个 SUM,但我需要使用 Sheet1 中的单元格值作为 Sheet2 中的行号并使用这些单元格值,而不是对 Sheet1 中的值求和在总和中。例如,Bill 的 SUM 应为 SUM(Sheet2! B1,C6,D4,E3) = 200

            Sheet1  
A       B       C       D       E       F  
Bill    1       6       4       3       200  
Sue     2       1       3       2       450  
Mary    3       2       2       1       550  
Joe     4       3       1       4       150  
Alice   5       4                       25  
Bob     6       5                       0  

            Sheet2
A       B       C       D       E  
1      100     200      50     400  
2       50     100      25     200  
3       25      50       0     100  
4        0      25       0      50  
5        0       0       0       0  
6        0       0       0       0  

这只是一个示例电子表格;在实际中,已经有 40 列,必要时还会添加更多列。

【问题讨论】:

    标签: excel


    【解决方案1】:

    Sheet1!F1:

    =SUMPRODUCT(N(OFFSET(Sheet2!$A$1,B1:E1-1+(B1:E1-1<0)*(2^20-1),COLUMN(B1:E1)-1)))
    

    根据需要向下复制。

    单元格Sheet2!1048576:1048576 不应包含内容。因为如果 Sheet1 中给出的行号为 0 或为空,则会引用这些单元格。

    【讨论】:

      【解决方案2】:

      Sheet2!A1:E6 中要求和的数据,在 Sheet1 的第一行的 F 列中使用此公式。

      =SUM(INDEX(Sheet2!B:B, B2)*SIGN(B2), INDEX(Sheet2!C:C, C2)*SIGN(C2), INDEX(Sheet2!D:D, D2)*SIGN(D2), INDEX(Sheet2!E:E, E2)*SIGN(E2))
      

      Sheet1 中的零或空白表示整个列,但乘以该单元格值的SIGN function。任何乘以零等于零,这不会影响总和。

            

      INDEX function 与提供row_num 参数的单元格值一起使用可以避免volatile¹ 函数,这些函数会对工作簿的计算滞后产生负面影响。


      ¹ 当整个工作簿中的任何内容发生变化时,可变函数都会重新计算,而不仅仅是在影响其结果的内容发生变化时。

      【讨论】:

      • 你提到的 volatile 函数是正确的,OFFSET 是一个 volatile 函数。但要求是“已经有 40 列,需要时添加更多列”。使用您的方法,您将需要为SUM 中的每一列添加一个INDEX 语句。在我看来,这并不是真正的解决方案。
      • 感谢您的意见。我想有些用户会更喜欢削弱他们的工作表,因为公式的“不便”需要更多输入,但我不是其中之一。
      猜你喜欢
      • 2017-03-28
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多