Excel:对此行命名的范围列求和

时间:2015-07-27 17:34:02

标签: excel named-ranges

我有通过VBA添加的动态列数。这些列是命名范围。如何求和该命名范围内所有列的当前行?

示例:

____|  A  |  B  |  C  |  D  |  E  |
  1 |     | 123 | 100 | aaa | 223 |
  2 |     | 111 | 101 | eee | 212 |
  3 |     | 112 | 102 | xxx | 214 |
  4 |     | 197 | 103 | yyy | 300 |
  5 |     | 176 | 104 | zzz | 280 |

让我们说列BC是名为ser_ua的命名范围。我不知道在这个命名范围内是否根本没有列,或者是否有50列。我如何总结当前行"切片"在(在这种情况下)E

2 个答案:

答案 0 :(得分:2)

您可以使用INDEX function“切片”一列,使用MATCH function查找第一行中的最后一个数字。

=sum(index(ser_ua, 0, match(1e99, 1:1)))

使用INDEX的 column_num 参数可以使用硬编码的数字或某个返回数字的公式将任何其他列“切片”。

SUM over INDEX slice

如果ser_ua是从B2开始的命名范围,那么你不能要求第1行中最后一个数字的hte列号。你必须要求ser_ua第一行的最后一个数字。

=sum(index(ser_ua, 0, match(1E+99, index(ser_ua, 1, 0))))

SUM over INDEX slice

答案 1 :(得分:1)

由于您已经在使用VBA,所以:

Public Function SumAcross(N As Long) As Variant
    Dim wf As WorksheetFunction, RangeToAdd As Range

    Set wf = Application.WorksheetFunction
    Set RangeToAdd = Intersect(Rows(N), Range("ser_ua"))

    SumAcross = wf.Sum(RangeToAdd)
End Function

enter image description here

修改#1:

为了改善 UDF 的波动性,我们可以将其传递给被检查的范围:

Public Function SumAcross(r As Range, N As Long) As Variant
    Dim wf As WorksheetFunction, RangeToAdd As Range

    Set wf = Application.WorksheetFunction
    Set RangeToAdd = Intersect(Rows(N), Range("ser_ua"))

    SumAcross = wf.Sum(RangeToAdd)
End Function

并在典型的工作表单元格中:

=SumAcross(ser_ua,ROW())