我有通过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 |
让我们说列B
和C
是名为ser_ua
的命名范围。我不知道在这个命名范围内是否根本没有列,或者是否有50列。我如何总结当前行"切片"在(在这种情况下)E
?
答案 0 :(得分:2)
您可以使用INDEX function“切片”一列,使用MATCH function查找第一行中的最后一个数字。
=sum(index(ser_ua, 0, match(1e99, 1:1)))
使用INDEX的 column_num 参数可以使用硬编码的数字或某个返回数字的公式将任何其他列“切片”。
如果ser_ua是从B2开始的命名范围,那么你不能要求第1行中最后一个数字的hte列号。你必须要求ser_ua第一行的最后一个数字。
=sum(index(ser_ua, 0, match(1E+99, index(ser_ua, 1, 0))))
答案 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
修改#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())