ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Sort and count or just count? (https://www.excelbanter.com/excel-programming/429490-sort-count-just-count.html)

Ron

Sort and count or just count?
 
A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to 10
rows of data. It puts the counts in of 7801 in col B of the name row and
7802's in col c. Worked like a champ......until I found under one name both a
7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I was
wondring, should I sort the rows putting 7801 first then loop -de-loop, or is
there a way to count as I scroll 7801's and 7802's on the first pass? (Of
course there is, that's why I came to you guys....)

Data look like this
A B C D
E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron

Jacob Skaria

Sort and count or just count?
 
Hi Ron

Without much loops, the below macro which will count all 7801 and 7802 for
all groups. I assume 7801 and 7802 are in number format. If text change the
numbers mentioned within the countif to "7801" and "7802". Try and feedback

Sub Macro()
Dim lngRow As Long
Dim lngTemp As Long
Dim lngLastRow As Long

lngLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For lngRow = 1 To lngLastRow
If Left(Range("A" & lngRow), 1) Like "[A-Z]" Then
If lngTemp < 0 And lngTemp < lngRow - 1 Then
Range("B" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7801)
Range("C" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7802)
End If
lngTemp = lngRow
End If
Next
Range("B" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7801)
Range("C" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7802)
End Sub



If this post helps click Yes
---------------
Jacob Skaria


"Ron" wrote:

A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to 10
rows of data. It puts the counts in of 7801 in col B of the name row and
7802's in col c. Worked like a champ......until I found under one name both a
7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I was
wondring, should I sort the rows putting 7801 first then loop -de-loop, or is
there a way to count as I scroll 7801's and 7802's on the first pass? (Of
course there is, that's why I came to you guys....)

Data look like this
A B C D
E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron


Jacob Skaria

Sort and count or just count?
 
Ron

If you dont have any blank rows (completly blank) in between..the below will
do..

Sub Macro()
Dim lngRow As Long, lngTemp As Long, lngLastRow As Long
lngLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For lngRow = 1 To lngLastRow + 1
If Not IsNumeric(Left(Range("A" & lngRow), 1)) Then
If lngTemp < 0 Then
Range("B" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7801)
Range("C" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7802)
End If
lngTemp = lngRow
End If
Next
End Sub

If this post helps click Yes
---------------
Jacob Skaria


"Ron" wrote:

A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to 10
rows of data. It puts the counts in of 7801 in col B of the name row and
7802's in col c. Worked like a champ......until I found under one name both a
7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I was
wondring, should I sort the rows putting 7801 first then loop -de-loop, or is
there a way to count as I scroll 7801's and 7802's on the first pass? (Of
course there is, that's why I came to you guys....)

Data look like this
A B C D
E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron


keiji kounoike

Sort and count or just count?
 
I presume that data start at A1 and data in column A is either name or
date and no blank cell between data.

Sub Counttest()
Dim Bcell As Range, Ecell As Range
Dim n As Long, m As Long
Dim vIN As Boolean

Set Bcell = Range("A1")
Set Ecell = Bcell.Cells(2, 1)
Do While (Bcell.Value < "")
If Not IsDate(Bcell) Then vIN = True
Do While (Not IsDate(Ecell))
Set Bcell = Ecell
Set Ecell = Bcell.Cells(2, 1)
If Bcell.Value = "" Then
vIN = False
Exit Do
End If
Loop
Do While (IsDate(Ecell))
Set Ecell = Ecell.Cells(2, 1)
Loop
If Not vIN Then Exit Do
Set Ecell = Ecell.Cells(0, 1)
n = Bcell.Row
m = Ecell.Row
Cells(n, "C").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7801)"
Cells(n, "D").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7802)"
Set Bcell = Ecell.Cells(2, 1)
Set Ecell = Bcell.Cells(2, 1)
vIN = False
Loop
End Sub

Keiji

Ron wrote:
A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to 10
rows of data. It puts the counts in of 7801 in col B of the name row and
7802's in col c. Worked like a champ......until I found under one name both a
7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I was
wondring, should I sort the rows putting 7801 first then loop -de-loop, or is
there a way to count as I scroll 7801's and 7802's on the first pass? (Of
course there is, that's why I came to you guys....)

Data look like this
A B C D
E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron


Ron

Sort and count or just count?
 
That worked perfectly....the only difference, in results, between yours and
keiji's was yours counted put zero's on every line, even when the name had no
data below it. They both worked and saved me a buch of lines of code and
frustration.

Thanks,

Ron

"Jacob Skaria" wrote:

Ron

If you dont have any blank rows (completly blank) in between..the below will
do..

Sub Macro()
Dim lngRow As Long, lngTemp As Long, lngLastRow As Long
lngLastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For lngRow = 1 To lngLastRow + 1
If Not IsNumeric(Left(Range("A" & lngRow), 1)) Then
If lngTemp < 0 Then
Range("B" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7801)
Range("C" & lngTemp) = WorksheetFunction.CountIf _
(Range("F" & lngTemp + 1 & ":F" & lngRow - 1), 7802)
End If
lngTemp = lngRow
End If
Next
End Sub

If this post helps click Yes
---------------
Jacob Skaria


"Ron" wrote:

A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to 10
rows of data. It puts the counts in of 7801 in col B of the name row and
7802's in col c. Worked like a champ......until I found under one name both a
7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I was
wondring, should I sort the rows putting 7801 first then loop -de-loop, or is
there a way to count as I scroll 7801's and 7802's on the first pass? (Of
course there is, that's why I came to you guys....)

Data look like this
A B C D
E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron


Ron

Sort and count or just count?
 
You presumed correctly and it worked perfectly. Both solutions worked and
gave me 2 different code sets to study and modify for use down the line.

Thanks,

Ron

"keiji kounoike" <"kounoike AT mbh.nifty." wrote:

I presume that data start at A1 and data in column A is either name or
date and no blank cell between data.

Sub Counttest()
Dim Bcell As Range, Ecell As Range
Dim n As Long, m As Long
Dim vIN As Boolean

Set Bcell = Range("A1")
Set Ecell = Bcell.Cells(2, 1)
Do While (Bcell.Value < "")
If Not IsDate(Bcell) Then vIN = True
Do While (Not IsDate(Ecell))
Set Bcell = Ecell
Set Ecell = Bcell.Cells(2, 1)
If Bcell.Value = "" Then
vIN = False
Exit Do
End If
Loop
Do While (IsDate(Ecell))
Set Ecell = Ecell.Cells(2, 1)
Loop
If Not vIN Then Exit Do
Set Ecell = Ecell.Cells(0, 1)
n = Bcell.Row
m = Ecell.Row
Cells(n, "C").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7801)"
Cells(n, "D").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7802)"
Set Bcell = Ecell.Cells(2, 1)
Set Ecell = Bcell.Cells(2, 1)
vIN = False
Loop
End Sub

Keiji

Ron wrote:
A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to 10
rows of data. It puts the counts in of 7801 in col B of the name row and
7802's in col c. Worked like a champ......until I found under one name both a
7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I was
wondring, should I sort the rows putting 7801 first then loop -de-loop, or is
there a way to count as I scroll 7801's and 7802's on the first pass? (Of
course there is, that's why I came to you guys....)

Data look like this
A B C D
E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron



keiji kounoike

Sort and count or just count?
 
I seemed like to put the result into wrong cells.
the code below

Cells(n, "C").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7801)"
Cells(n, "D").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7802)"


should be

Cells(n, "B").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7801)"
Cells(n, "C").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7802)"

Keiji

keiji kounoike wrote:
I presume that data start at A1 and data in column A is either name or
date and no blank cell between data.

Sub Counttest()
Dim Bcell As Range, Ecell As Range
Dim n As Long, m As Long
Dim vIN As Boolean

Set Bcell = Range("A1")
Set Ecell = Bcell.Cells(2, 1)
Do While (Bcell.Value < "")
If Not IsDate(Bcell) Then vIN = True
Do While (Not IsDate(Ecell))
Set Bcell = Ecell
Set Ecell = Bcell.Cells(2, 1)
If Bcell.Value = "" Then
vIN = False
Exit Do
End If
Loop
Do While (IsDate(Ecell))
Set Ecell = Ecell.Cells(2, 1)
Loop
If Not vIN Then Exit Do
Set Ecell = Ecell.Cells(0, 1)
n = Bcell.Row
m = Ecell.Row
Cells(n, "C").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7801)"
Cells(n, "D").Formula = "=countif(" & _
Range(Cells(n + 1, "F"), Cells(m, "F")).Address & ",7802)"
Set Bcell = Ecell.Cells(2, 1)
Set Ecell = Bcell.Cells(2, 1)
vIN = False
Loop
End Sub

Keiji

Ron wrote:
A1 ln, fn - Nothing else in 1st row
next row, or next 2 or 3 rows have data with either 7801 or 7802 in
col f.
After data comes another ln, fn with nothing in row. So basically,
sscrolling down column f sepearates each person with a bloank line.

I did a loop that counted the 7801's and 7802's for each person, up to
10 rows of data. It puts the counts in of 7801 in col B of the name
row and 7802's in col c. Worked like a champ......until I found under
one name both a 7801 and a 7802.

Well, I don't want to put 10 loops under each 10 lops, etc...so...I
was wondring, should I sort the rows putting 7801 first then loop
-de-loop, or is there a way to count as I scroll 7801's and 7802's on
the first pass? (Of course there is, that's why I came to you guys....)

Data look like this
A B C
D E F
Doe, John 1 1
5/7/2009 1:31:20PM OUT 8 :00 7801
5/7/2009 1:31:20PM OUT 8 :00 7802
Smith, Jane 1 1
5/7/2009 1:31:20PM OUT 8 :00 7802
5/7/2009 1:31:20PM OUT 8 :00 7801
Brown, Suzie 1
5/7/2009 9:09:15AM OUT 13 :26 7802
Black, Dave
Lowe, Stacy 3
5/7/2009 10:29:05AM OUT 13 :48 7802
5/7/2009 3:01:58PM OUT 13 :33 7802
5/7/2009 5:25:24PM OUT 13 :25 7802
etc, etc

I out the counts in column B and C.

Now, how can I go about this....without my normal 60 lines of code??

Thanks,

Ron



All times are GMT +1. The time now is 01:52 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com