Aladin, Thank you for your post. Here's a typical example: 3 5 2 -1 -6 -2 0 3 9 8 4 -3 0 I'd appreciate excel formulas that will calculate the sum for the greatest run of + numbers (aka "runup") and neg numbers (aka "drawdown") In the above case, the formula for the greatest drawdown should catch the cells-1, -6, -2 and show "-9" in the cell For the runup version, another cell with a slightly different formula will show the sum of 0+3+9+8+4, or "24" thank you
One way, with the following proviso's: (i) It requires an array formula which calls ACONCAT, a basic function coded in VBA; (ii) the first longest streak is summed [see Peter's point enumerated as (a) in his reply].
[TABLE="width: 127"]
<TBODY>[TR]
[TD="class: xl65, width: 64, bgcolor: transparent"][/TD]
[TD="class: xl65, width: 33, bgcolor: transparent"][/TD]
[TD="class: xl65, width: 41, bgcolor: transparent"][/TD]
[TD="class: xl65, width: 31, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
3
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"]
count
[/TD]
[TD="class: xl65, bgcolor: transparent"]
sum
[/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
5
[/TD]
[TD="class: xl65, bgcolor: transparent"]
neg
[/TD]
[TD="class: xl65, bgcolor: transparent, align: right"]
3
[/TD]
[TD="class: xl65, bgcolor: transparent, align: right"]
-9
[/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
2
[/TD]
[TD="class: xl65, bgcolor: transparent"]
pos
[/TD]
[TD="class: xl65, bgcolor: transparent, align: right"]
5
[/TD]
[TD="class: xl65, bgcolor: transparent, align: right"]
24
[/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
-1
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
-6
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
-2
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
0
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
3
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
9
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
8
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
4
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
-3
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
[TR]
[TD="class: xl65, bgcolor: transparent, align: right"]
0
[/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[TD="class: xl65, bgcolor: transparent"][/TD]
[/TR]
</TBODY>[/TABLE]
C3, control+shift+enter (CSE), not just enter:
Rich (BB code):
=MAX(FREQUENCY(IF(A2:A14 < 0,ROW(A2:A14)),
IF(ISNUMBER(A2:A14),IF(A2:A14 >= 0,ROW(A2:A14)))))
C4, CSE:
Rich (BB code):
=MAX(FREQUENCY(IF(ISNUMBER(A2:A14),
IF(A2:A14>=0,ROW(A2:A14))),IF(A2:A14<0,ROW(A2:A14))))
The formulas for summing needs ACONCAT...
D3, CSE:
Rich (BB code):
=SUM(OFFSET($A$2,LOOKUP(9.99999999999999E+307,
FIND(aconcat(ROW(INDIRECT("1:"&C3))^0),
aconcat(IF(A2:A14 < 0,SIGN(ROW(A2:A14)),0))))-1,0,C3))
D4, CSE:
Rich (BB code):
=SUM(OFFSET($A$2,LOOKUP(9.99999999999999E+307,
FIND(aconcat(ROW(INDIRECT("1:"&C4))^0),
aconcat(IF(A2:A14>=0,SIGN(ROW(A2:A14)),0))))-1,0,C4))
You need to add the code for ACONCAT as module to your workbook:
Function aconcat(a As Variant, Optional sep As String = "") As String
' Harlan Grove, Mar 2002
Dim y As Variant
If TypeOf a Is Range Then
For Each y In a.Cells
aconcat = aconcat & y.Value & sep
Next y
ElseIf IsArray(a) Then
For Each y In a
aconcat = aconcat & y & sep
Next y
Else
aconcat = aconcat & a & sep
End If
aconcat = Left(aconcat, Len(aconcat) - Len(sep))
End Function