PC Review


Reply
Thread Tools Rate Thread

Determining number of Ranges

 
 
Jimmy O
Guest
Posts: n/a
 
      1st Mar 2008
I'm new to VBA and I have a worksheet where I need to determine the number of
contiguous blocks of cells with data in them. There could be two to four
blocks. All of the blocks will be within Range A1:I25. I thought I could use
Areas.Count so I set up a test Sub with three blocks of cells. Here is the
sub:

Sub CountAreas()
Range("A1:C7").Value = 9
Range("F9:I16").Value = 10
Range("A2125").Value = 12
Range("A1:I25").Select
x = Selection.Areas.Count
Range("A30").Value = x
Debug.Print x
End Sub

The value of x is 1 when I run the sub. I thought it should be 3. Any help
on what I'm doing incorrectly would be apprciated.


 
Reply With Quote
 
 
 
 
Don
Guest
Posts: n/a
 
      1st Mar 2008
Jimmy,

Can't tell you the best way to get but I can suggest why you're getting the
answer you're getting....I'm sure someone will jump in here and give you a
one liner or two to accomplish your goal.

In your macro, your macro does not test for data, it only tests to see if
that one Range is valid. Check this out by clearing all data and commenting
out the Range values in your macro. You'll get the same answer...."1". You
need to loope through each Range, testing for data. Add 1 to a variable that
starts at "0" for each range that has data, then check the variable.value,
you'll find the answer will be three.

HTH, and if it doesn't, like I said, someone will put us both straight....
Don


"Jimmy O" wrote:

> I'm new to VBA and I have a worksheet where I need to determine the number of
> contiguous blocks of cells with data in them. There could be two to four
> blocks. All of the blocks will be within Range A1:I25. I thought I could use
> Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> sub:
>
> Sub CountAreas()
> Range("A1:C7").Value = 9
> Range("F9:I16").Value = 10
> Range("A2125").Value = 12
> Range("A1:I25").Select
> x = Selection.Areas.Count
> Range("A30").Value = x
> Debug.Print x
> End Sub
>
> The value of x is 1 when I run the sub. I thought it should be 3. Any help
> on what I'm doing incorrectly would be apprciated.
>
>

 
Reply With Quote
 
Gary''s Student
Guest
Posts: n/a
 
      1st Mar 2008
Sub CountAreas()
Range("A1:C7").Value = 9
Range("F9:I16").Value = 10
Range("A2125").Value = 12

Union(Range("A1:C7"), Range("F9:I16"), Range("A2125")).Select


x = Selection.Areas.Count
Range("A30").Value = x
Debug.Print x
End Sub

You code made one big range / area.
--
Gary''s Student - gsnu200771


"Jimmy O" wrote:

> I'm new to VBA and I have a worksheet where I need to determine the number of
> contiguous blocks of cells with data in them. There could be two to four
> blocks. All of the blocks will be within Range A1:I25. I thought I could use
> Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> sub:
>
> Sub CountAreas()
> Range("A1:C7").Value = 9
> Range("F9:I16").Value = 10
> Range("A2125").Value = 12
> Range("A1:I25").Select
> x = Selection.Areas.Count
> Range("A30").Value = x
> Debug.Print x
> End Sub
>
> The value of x is 1 when I run the sub. I thought it should be 3. Any help
> on what I'm doing incorrectly would be apprciated.
>
>

 
Reply With Quote
 
Dave Peterson
Guest
Posts: n/a
 
      1st Mar 2008
I'm not quite sure why you're selecting stuff, but here's another option:

Range("A1:C7,F9:I16,A2125").Select
MsgBox Selection.Areas.Count



Jimmy O wrote:
>
> I'm new to VBA and I have a worksheet where I need to determine the number of
> contiguous blocks of cells with data in them. There could be two to four
> blocks. All of the blocks will be within Range A1:I25. I thought I could use
> Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> sub:
>
> Sub CountAreas()
> Range("A1:C7").Value = 9
> Range("F9:I16").Value = 10
> Range("A2125").Value = 12
> Range("A1:I25").Select
> x = Selection.Areas.Count
> Range("A30").Value = x
> Debug.Print x
> End Sub
>
> The value of x is 1 when I run the sub. I thought it should be 3. Any help
> on what I'm doing incorrectly would be apprciated.


--

Dave Peterson
 
Reply With Quote
 
Don
Guest
Posts: n/a
 
      1st Mar 2008
Dave,

If I'm reading the OP correctly he has a number of ranges defined, there may
or may not be data in a cell or cells in any of these ranges. I think what
he's trying to develop is the number of ranges that do have data in at least
one cell. Might be wrong and hopefully he'll jump in here and clarify a
bit.....

Don

"Dave Peterson" wrote:

> I'm not quite sure why you're selecting stuff, but here's another option:
>
> Range("A1:C7,F9:I16,A2125").Select
> MsgBox Selection.Areas.Count
>
>
>
> Jimmy O wrote:
> >
> > I'm new to VBA and I have a worksheet where I need to determine the number of
> > contiguous blocks of cells with data in them. There could be two to four
> > blocks. All of the blocks will be within Range A1:I25. I thought I could use
> > Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> > sub:
> >
> > Sub CountAreas()
> > Range("A1:C7").Value = 9
> > Range("F9:I16").Value = 10
> > Range("A2125").Value = 12
> > Range("A1:I25").Select
> > x = Selection.Areas.Count
> > Range("A30").Value = x
> > Debug.Print x
> > End Sub
> >
> > The value of x is 1 when I run the sub. I thought it should be 3. Any help
> > on what I'm doing incorrectly would be apprciated.

>
> --
>
> Dave Peterson
>

 
Reply With Quote
 
Jimmy O
Guest
Posts: n/a
 
      1st Mar 2008
Thanks Don. I know the block of cells will have data. See my reply to your
2nd post for more info that I believe Dave asked for.

"Don" wrote:

> Jimmy,
>
> Can't tell you the best way to get but I can suggest why you're getting the
> answer you're getting....I'm sure someone will jump in here and give you a
> one liner or two to accomplish your goal.
>
> In your macro, your macro does not test for data, it only tests to see if
> that one Range is valid. Check this out by clearing all data and commenting
> out the Range values in your macro. You'll get the same answer...."1". You
> need to loope through each Range, testing for data. Add 1 to a variable that
> starts at "0" for each range that has data, then check the variable.value,
> you'll find the answer will be three.
>
> HTH, and if it doesn't, like I said, someone will put us both straight....
> Don
>
>
> "Jimmy O" wrote:
>
> > I'm new to VBA and I have a worksheet where I need to determine the number of
> > contiguous blocks of cells with data in them. There could be two to four
> > blocks. All of the blocks will be within Range A1:I25. I thought I could use
> > Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> > sub:
> >
> > Sub CountAreas()
> > Range("A1:C7").Value = 9
> > Range("F9:I16").Value = 10
> > Range("A2125").Value = 12
> > Range("A1:I25").Select
> > x = Selection.Areas.Count
> > Range("A30").Value = x
> > Debug.Print x
> > End Sub
> >
> > The value of x is 1 when I run the sub. I thought it should be 3. Any help
> > on what I'm doing incorrectly would be apprciated.
> >
> >

 
Reply With Quote
 
Jimmy O
Guest
Posts: n/a
 
      1st Mar 2008
Thank you Gary for the reply. The blocks of numbers could be in other Ranges
of cells, for example B3: D8. However, to get this to work, I may have to
designate the Ranges that contain the date and then use Union.

"Gary''s Student" wrote:

> Sub CountAreas()
> Range("A1:C7").Value = 9
> Range("F9:I16").Value = 10
> Range("A2125").Value = 12
>
> Union(Range("A1:C7"), Range("F9:I16"), Range("A2125")).Select
>
>
> x = Selection.Areas.Count
> Range("A30").Value = x
> Debug.Print x
> End Sub
>
> You code made one big range / area.
> --
> Gary''s Student - gsnu200771
>
>
> "Jimmy O" wrote:
>
> > I'm new to VBA and I have a worksheet where I need to determine the number of
> > contiguous blocks of cells with data in them. There could be two to four
> > blocks. All of the blocks will be within Range A1:I25. I thought I could use
> > Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> > sub:
> >
> > Sub CountAreas()
> > Range("A1:C7").Value = 9
> > Range("F9:I16").Value = 10
> > Range("A2125").Value = 12
> > Range("A1:I25").Select
> > x = Selection.Areas.Count
> > Range("A30").Value = x
> > Debug.Print x
> > End Sub
> >
> > The value of x is 1 when I run the sub. I thought it should be 3. Any help
> > on what I'm doing incorrectly would be apprciated.
> >
> >

 
Reply With Quote
 
Jimmy O
Guest
Posts: n/a
 
      1st Mar 2008
My initial Sub was

Sub CountAreas()
x = Range("A1:I25").Areas.Count
Range("A30").Value = x
Debug.Print x
End Sub

with the the data already in the three ranges. I added the code to insert
the values into the cells and select stuff because I thought I was doing
something incorrectly. The above code gives x the value of 1 also. I thought
the areas collection count would give the number of non contiguous cells
(containing data) within a given Range.

Thanks everyone for your responses


"Don" wrote:

> Dave,
>
> If I'm reading the OP correctly he has a number of ranges defined, there may
> or may not be data in a cell or cells in any of these ranges. I think what
> he's trying to develop is the number of ranges that do have data in at least
> one cell. Might be wrong and hopefully he'll jump in here and clarify a
> bit.....
>
> Don
>
> "Dave Peterson" wrote:
>
> > I'm not quite sure why you're selecting stuff, but here's another option:
> >
> > Range("A1:C7,F9:I16,A2125").Select
> > MsgBox Selection.Areas.Count
> >
> >
> >
> > Jimmy O wrote:
> > >
> > > I'm new to VBA and I have a worksheet where I need to determine the number of
> > > contiguous blocks of cells with data in them. There could be two to four
> > > blocks. All of the blocks will be within Range A1:I25. I thought I could use
> > > Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> > > sub:
> > >
> > > Sub CountAreas()
> > > Range("A1:C7").Value = 9
> > > Range("F9:I16").Value = 10
> > > Range("A2125").Value = 12
> > > Range("A1:I25").Select
> > > x = Selection.Areas.Count
> > > Range("A30").Value = x
> > > Debug.Print x
> > > End Sub
> > >
> > > The value of x is 1 when I run the sub. I thought it should be 3. Any help
> > > on what I'm doing incorrectly would be apprciated.

> >
> > --
> >
> > Dave Peterson
> >

 
Reply With Quote
 
Jimmy O
Guest
Posts: n/a
 
      1st Mar 2008
Thank you very much for the reply Dave. I explain a little more why I
selected stuff in my reply to Don's 2nd post. the data won't always be in the
three ranges I designated. one set of data could be in be in B9:E13, for
example. Thank you again.


"Dave Peterson" wrote:

> I'm not quite sure why you're selecting stuff, but here's another option:
>
> Range("A1:C7,F9:I16,A2125").Select
> MsgBox Selection.Areas.Count
>
>
>
> Jimmy O wrote:
> >
> > I'm new to VBA and I have a worksheet where I need to determine the number of
> > contiguous blocks of cells with data in them. There could be two to four
> > blocks. All of the blocks will be within Range A1:I25. I thought I could use
> > Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> > sub:
> >
> > Sub CountAreas()
> > Range("A1:C7").Value = 9
> > Range("F9:I16").Value = 10
> > Range("A2125").Value = 12
> > Range("A1:I25").Select
> > x = Selection.Areas.Count
> > Range("A30").Value = x
> > Debug.Print x
> > End Sub
> >
> > The value of x is 1 when I run the sub. I thought it should be 3. Any help
> > on what I'm doing incorrectly would be apprciated.

>
> --
>
> Dave Peterson
>

 
Reply With Quote
 
Don
Guest
Posts: n/a
 
      1st Mar 2008
Jimmy,

Still don't know if I understand correctly what you're trying to do, but if
I do, this code with some revisions to suit your set up will give you the
number of Ranges that have at least one cell with data in it.....

Option Explicit

Sub NumOfRges()

Dim Rge1 As Range
Dim Rge2 As Range
Dim Cell As Range
Dim x1, x2 As Integer

x1 = 0
x2 = 0
Set Rge1 = Range("A17")
Set Rge2 = Range("C1722")

For Each Cell In Rge1
If Cell.Value <> "" Then
x1 = 1
End If
Next

For Each Cell In Rge2
If Cell.Value <> "" Then
x2 = 1
End If
Next

MsgBox ("x1 = ") & x1
MsgBox ("x2 = ") & x2
MsgBox ("Total Ranges with Data = ") & x1 + x2

End Sub


Probably a cleaner way to get there but this does work. You will have to
define each range within the macro and loop through each rge.

HTH,

Don

"Jimmy O" wrote:

> My initial Sub was
>
> Sub CountAreas()
> x = Range("A1:I25").Areas.Count
> Range("A30").Value = x
> Debug.Print x
> End Sub
>
> with the the data already in the three ranges. I added the code to insert
> the values into the cells and select stuff because I thought I was doing
> something incorrectly. The above code gives x the value of 1 also. I thought
> the areas collection count would give the number of non contiguous cells
> (containing data) within a given Range.
>
> Thanks everyone for your responses
>
>
> "Don" wrote:
>
> > Dave,
> >
> > If I'm reading the OP correctly he has a number of ranges defined, there may
> > or may not be data in a cell or cells in any of these ranges. I think what
> > he's trying to develop is the number of ranges that do have data in at least
> > one cell. Might be wrong and hopefully he'll jump in here and clarify a
> > bit.....
> >
> > Don
> >
> > "Dave Peterson" wrote:
> >
> > > I'm not quite sure why you're selecting stuff, but here's another option:
> > >
> > > Range("A1:C7,F9:I16,A2125").Select
> > > MsgBox Selection.Areas.Count
> > >
> > >
> > >
> > > Jimmy O wrote:
> > > >
> > > > I'm new to VBA and I have a worksheet where I need to determine the number of
> > > > contiguous blocks of cells with data in them. There could be two to four
> > > > blocks. All of the blocks will be within Range A1:I25. I thought I could use
> > > > Areas.Count so I set up a test Sub with three blocks of cells. Here is the
> > > > sub:
> > > >
> > > > Sub CountAreas()
> > > > Range("A1:C7").Value = 9
> > > > Range("F9:I16").Value = 10
> > > > Range("A2125").Value = 12
> > > > Range("A1:I25").Select
> > > > x = Selection.Areas.Count
> > > > Range("A30").Value = x
> > > > Debug.Print x
> > > > End Sub
> > > >
> > > > The value of x is 1 when I run the sub. I thought it should be 3. Any help
> > > > on what I'm doing incorrectly would be apprciated.
> > >
> > > --
> > >
> > > Dave Peterson
> > >

 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
determining slide number and object/shape number Candace Microsoft Powerpoint 4 6th May 2008 03:52 PM
Determining number of columns of 2 different ranges filo666 Microsoft Excel Programming 2 16th Jan 2008 10:09 AM
determining identical ranges upstate_steve Microsoft Excel Misc 2 23rd Apr 2004 08:00 PM
Determining if two ranges overlap Marky Microsoft Excel Programming 4 18th Feb 2004 09:54 AM
Determining date ranges Philip Townsend Microsoft ASP .NET 0 6th Nov 2003 08:26 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 03:56 AM.