Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / General Excel Questions / November 2007

Tip: Looking for answers? Try searching our database.

Finding the longest contiguous 1-d array of 0's

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
MJW - 30 Nov 2007 14:37 GMT
Hi All,

Ok, I can't think of any remotely-easy way to do this.  My data exists as
such:  accounts listed in the rows, dates (by month) listed in the columns;
in the fields corresponding to each account/dates is the quantity of items
the account purchased in that month.

Is it formulaically possible (barring VBA) to have Excel calculate the
longest contiguous string of zero-value cells for each row?   (What I'm
trying to discern is a historical gap-analysis for the longest no-purchase
period of a given row/account.)  Any thoughts or suggestions are greatly
appreciated, as always.

Thanks,

Jamie W.
Herbert Seidenberg - 30 Nov 2007 19:52 GMT
Assume you have a list like this:
XYZ    2    0    4    0    0    6    0    0    0    1
RST    1    0    0    0    0    4    3    0    0    1
MNO    4    7    0    0    0    0    0    4    0    2

Define this 3x11 array as MyArray.
Define another adjacent 3x11 array as MyAccu.
Insert > Name > Define > CSet and RSET respectively
=COLUMN(INDEX($1:$1,,1):INDEX($1:$1,,COLUMNS(MyArray)))
=ROW(INDEX($A:$A,1,):INDEX($A:$A,ROWS(MyArray),))
Tools > Options > Calculations > Iterate > 11 (your number of columns)
Select MyAccu and enter this array formula:
=IF(INDEX(MyArray,RSet,CSet-1)=0,INDEX(MyAccu,RSet,CSet-1)+1,0)
Adjacent, select a 3x1 column and enter this array formula:
=MAX(INDEX(MyAccu,RSet,))
The result should look like this:
0    0    0    1    0    1    2    0    1    2    3        3
0    0    0    1    2    3    4    0    0    1    2        4
0    0    0    0    1    2    3    4    5    0    1        5
You can hide MyAccu if desired.
The last column will show the maximum number
of adjacent 0's in a row in MyArray
Caveat: The last date is ignored to make things simple.
Don Guillett - 30 Nov 2007 23:25 GMT
Try this where text in col a and numbers in col 2-11
Sub findlongestzeros()
For i = 1 To Cells(Rows.Count, "a").End(xlUp).Row
mc = 0
For j = 2 To 11
If Cells(i, j) = 0 And Cells(i, j + 1) = 0 Then mc = mc + 1
Next j
'MsgBox mc
If mc > mss Then
mss = mc
mr = i
End If
Next i
MsgBox "Max is Row " & mr
'MsgBox mss
End Sub

Signature

Don Guillett
Microsoft MVP Excel
SalesAid Software
dguillett1@austin.rr.com

> Hi All,
>
[quoted text clipped - 13 lines]
>
> Jamie W.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.