“最大连续的负数”是指连续出现负数单元格最多的连续区域吗?如果提问时补充说明下就是求A16-A19的和,那么就不会有疑问了。
用比较笨的方法编写了一个公式,也许有更简单的。为了使问题更具有代表性,把你的数据稍做了调整,把最大连续负数放到了中间A11:A14,如图,公式:
=SUM(OFFSET(A1,SMALL(IF(A1:A19<0,ROW(1:19)),SUM(FREQUENCY(IF(A1:A19<0,ROW(1:19)),IF(A1:A19>=0,ROW(1:19)))*(ROW(INDIRECT("1:"&COUNT(FREQUENCY(IF(A1:A19<0,ROW(1:19)),IF(A1:A19>=0,ROW(1:19))))))
同时按Ctrl+Shift+Enter三键输入数组公式,公式中19为你的数据行数。
Public Function sumf(rng As Range)
'功能:对指定范围内连续最长的负数求和
Set d = CreateObject("Scripting.dictionary")
For Each cc In rng
If cc < 0 Then
k = k + 1
ElseIf k > 0 Then
d(k) = cc.Offset(-k).Address
k = 0
End If
If cc.Offset(1) = "" Then
d(k) = cc.Offset(-k + 1).Address
End If
Next cc
最大值 = Application.WorksheetFunction.Max(d.Keys)
最下地址 = d(最大值)
最终范围 = Range(最下地址).Resize(最大值)
sumf = Application.WorksheetFunction.sum(最终范围)
End Function
写了一个sumf的函数,使用方法与excel函数相同。
代码使用说明:
1、按alt+f11,弹出vba窗口,插入--模块
2、粘贴以上代码到模块里
3、名为sumf的自定义函数生效,可以去表格里使用了
注:上楼的公式也不错
B2公式:=IFERROR(IF((A2<0)*(A3>=0),SUMIF($A$2:A2,"<0"),"")-SUM($B$1:B1),"")下拉。