![]() |
#1
|
|||
|
|||
![]()
Good Morning All!
I hope I have an easy one for you this morning. I've got about 96k rows of policy numbers and 12 columns starting in column B (Jan-Dec). If a policyholder called within that month it displays how many times they called. I'm not concerned with how many calls they made, only if there is a value > 0 within that cell. The goal here is to sum the clusters of consecutive months they called in. If they call in just in January but not in February, I don't care. If they call in January and February, but not March, that would be considered 1 cluster. If they called in January, February, March, not in April, not in May, called in June, not called in July, called in August, called in September, didn't call us the rest of the year, the sum of clusters would be 2 (Jan-Mar) and (Aug-Sept), don't care about the 1 off month of June where they called since it's not a cluster. I've been trying to incorporate code similar to "=SUM(--((FREQUENCY(IF(A2:H2>=50, COLUMN(A2:H2)),IF(A2:H2<50,COLUMN(A2:H2))))>=3))" granted this series of code is for a completely different project unrelated, but I feel like it could be applicable by changing the cells and values (50 and 3). I hope this goal makes sense and someone can help. If you need anymore information, let me know. The simpler the better. |
#2
|
|||
|
|||
![]()
Having Policy in column A, and months in columns B:M
Code:
=AND(SUM(B2)>0,C2>0,D2=0)+AND(SUM(C2)>0,D2>0,E2=0)+AND(SUM(D2)>0,E2>0,F2=0)+AND(SUM(E2)>0,F2>0,G2=0)+AND(SUM(F2)>0,G2>0,H2=0)+AND(SUM(G2)>0,H2>0,I2=0)+AND(SUM(H2)>0,I2>0,J2=0)+AND(SUM(I2)>0,J2>0,K2=0)+AND(SUM(J2)>0,K2>0,L2=0)+AND(SUM(K2)>0,L2>0,M2=0)+AND(SUM(L2)>0,M2>0) |
#3
|
|||
|
|||
![]() Quote:
![]() |
#4
|
|||
|
|||
![]() Quote:
When yes, then of-course you can write a VBA procedure, which counts the number of rows in UsedRange, and processes then every datarow in your table, calcualtes same formula in VBA (you have to remember, that in VBA FALSE is 0 like in worksheet, but TRUE converts to -1, so you hafe to multiply the result with -1) for every row, and writes the result into proper column in your table. You can run the procedure from button on worksheet, or you can create a shortcut key combination to run it. I myself don't have Office available for today and tomorrow. |
#5
|
||||
|
||||
![]()
Perhaps post a sample sheet with some data and expected results? ( Go advanced - Manage attachments)
__________________
Using O365 v2503 - Did you know you can thank someone who helped you? Click on the tiny scale in the right upper hand corner of your helper's post |
#6
|
|||
|
|||
![]()
No problem! Here is the test data. Test 1, Test 2, etc will be policy #'s and column Q is where I'd like the sum of the clusters to be placed. The Excel Code that ArviLaanemets provided works perfectly and gives the correct results in column S. However, I'm trying to use code in VBA to achieve these results as it will be for a larger data set.
|
#7
|
|||
|
|||
![]() ![]() ![]() |
#8
|
|||
|
|||
![]() Quote:
https://www.ozgrid.com/forum/forum/h...uencies-in-vba https://www.mrexcel.com/forum/excel-...ithin-vba.html better? |
#9
|
|||
|
|||
![]()
Using NBVC's formula, adjusted for the columns you actually want, and the sample workbook you posted over there....see if this works
Code:
Sub Clusters() Dim lr As Long With Sheets("Sheet3") lr = .Cells(2, "A").End(xlDown).Row .Range("Q2").FormulaArray = "=SUM(--((FREQUENCY(IF(B2:M2>0, COLUMN(B2:M2)),IF(B2:M2=0,COLUMN(B2:M2))))>1))" .Range("Q2").AutoFill Destination:=Range("Q2:Q" & lr) End With End Sub |
#10
|
|||
|
|||
![]() Quote:
|
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Word & Excel 2010 - Best Options To Auto Insert MySQL & Excel Data? | Hoser | Word | 1 | 03-17-2017 03:47 PM |
Embeding Excel Docs in Word - Receiving Memory Error Message if Excel is open | kdash | Word | 0 | 05-06-2015 09:38 AM |
![]() |
ADubin | Excel Programming | 3 | 02-08-2015 04:57 AM |
![]() |
bremen22 | Excel Programming | 1 | 08-07-2013 11:01 AM |
![]() |
FLJohnson | Excel | 8 | 05-09-2012 11:26 PM |