ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Specifying a range for sorting. (https://www.excelbanter.com/excel-programming/429843-specifying-range-sorting.html)

DocBrown

Specifying a range for sorting.
 
I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.


Jacob Skaria

Specifying a range for sorting.
 
The below will give you the last entry in M starting from 29
lngLastrow = ActiveSheet.Cells(29, "M").End(xlDown).Row

OR

The below will give you the row number of the first entry starting from 161
upwards
lngLastrow = ActiveSheet.Cells(161, "M").End(xlUp).Row

Adjust to suit

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


"DocBrown" wrote:

I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.


DocBrown

Specifying a range for sorting.
 
Thanks, I'll try that.

John

"Jacob Skaria" wrote:

The below will give you the last entry in M starting from 29
lngLastrow = ActiveSheet.Cells(29, "M").End(xlDown).Row

OR

The below will give you the row number of the first entry starting from 161
upwards
lngLastrow = ActiveSheet.Cells(161, "M").End(xlUp).Row

Adjust to suit

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


"DocBrown" wrote:

I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.


Jim Cone[_2_]

Specifying a range for sorting.
 
"But if AccountLastRow is 31, then the range is $M30:M60"

There are 31 rows in range(M30:M60).
That appears to be the correct answer.
Were you expecting range(M30:M31)?
--
Jim Cone
Portland, Oregon USA




"DocBrown"

wrote in message
I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.


DocBrown

Specifying a range for sorting.
 
Yes, Given the values I supplied, I want the range to become (M30:M31). What
is the syntax for generating that range?

In the way I have coded it, it is apparent that the 31, which is the row
number is being added to the starting rwo of 30 to create that (M30:M60)
range.

Thanks,
John

"Jim Cone" wrote:

"But if AccountLastRow is 31, then the range is $M30:M60"

There are 31 rows in range(M30:M60).
That appears to be the correct answer.
Were you expecting range(M30:M31)?
--
Jim Cone
Portland, Oregon USA




"DocBrown"

wrote in message
I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.



Jacob Skaria

Specifying a range for sorting.
 
Try the below function which returns the new range address..

Sub Mac()
Dim rngTemp As Range
Set rngTemp = Range("$M$30:$M$160")
MsgBox GetRangeAddress(rngTemp)

End Sub

Function GetRangeAddress(rngTemp) As String
Dim newRange As Range
lngrow = ActiveSheet.Cells(rngTemp.Row, "A").End(xlDown).Row
Set newRange = Range(Cells(rngTemp.Row, rngTemp.Column), Cells(lngrow,
rngTemp.Column))
GetRangeAddress = newRange.Address
End Function

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


"DocBrown" wrote:

Thanks, I'll try that.

John

"Jacob Skaria" wrote:

The below will give you the last entry in M starting from 29
lngLastrow = ActiveSheet.Cells(29, "M").End(xlDown).Row

OR

The below will give you the row number of the first entry starting from 161
upwards
lngLastrow = ActiveSheet.Cells(161, "M").End(xlUp).Row

Adjust to suit

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


"DocBrown" wrote:

I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.


Jacob Skaria

Specifying a range for sorting.
 
Revised one..The earlier one retuns wrong address if you have blank rows in
between data..

Function GetRangeAddress(rngTemp) As String
Dim newRange As Range
lngRow = rngTemp.Row + rngTemp.Rows.Count
lngRow = ActiveSheet.Cells(lngRow, rngTemp.Column).End(xlUp).Row
Set newRange = Range(Cells(rngTemp.Row, rngTemp.Column), _
Cells(lngRow, rngTemp.Column))
GetRangeAddress = newRange.Address
End Function

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


"DocBrown" wrote:

Thanks, I'll try that.

John

"Jacob Skaria" wrote:

The below will give you the last entry in M starting from 29
lngLastrow = ActiveSheet.Cells(29, "M").End(xlDown).Row

OR

The below will give you the row number of the first entry starting from 161
upwards
lngLastrow = ActiveSheet.Cells(161, "M").End(xlUp).Row

Adjust to suit

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


"DocBrown" wrote:

I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.


Jim Cone[_2_]

Specifying a range for sorting.
 
Sub Redo()
Dim RowsCount As Long
Dim CurrRng As Range
Dim CurrRng2 As Range

RowsCount = Range("AcctList").Cells.Count
Set CurrRng = Range("AcctList")(1)
Set CurrRng2 = Range("AcctList")(RowsCount + 1).End(xlUp)
MsgBox Range(CurrRng, CurrRng2).Address
End Sub
--
Jim Cone
Portland, Oregon USA




"DocBrown"
wrote in message
Yes, Given the values I supplied, I want the range to become (M30:M31). What
is the syntax for generating that range?

In the way I have coded it, it is apparent that the 31, which is the row
number is being added to the starting rwo of 30 to create that (M30:M60)
range.
Thanks,
John





"Jim Cone" wrote:
"But if AccountLastRow is 31, then the range is $M30:M60"

There are 31 rows in range(M30:M60).
That appears to be the correct answer.
Were you expecting range(M30:M31)?
--
Jim Cone
Portland, Oregon USA



DocBrown

Specifying a range for sorting.
 
I like this solution. It's short and concise.

Thanks, Jim

John

"Jim Cone" wrote:

Sub Redo()
Dim RowsCount As Long
Dim CurrRng As Range
Dim CurrRng2 As Range

RowsCount = Range("AcctList").Cells.Count
Set CurrRng = Range("AcctList")(1)
Set CurrRng2 = Range("AcctList")(RowsCount + 1).End(xlUp)
MsgBox Range(CurrRng, CurrRng2).Address
End Sub
--
Jim Cone
Portland, Oregon USA




"DocBrown"
wrote in message
Yes, Given the values I supplied, I want the range to become (M30:M31). What
is the syntax for generating that range?

In the way I have coded it, it is apparent that the 31, which is the row
number is being added to the starting rwo of 30 to create that (M30:M60)
range.
Thanks,
John





"Jim Cone" wrote:
"But if AccountLastRow is 31, then the range is $M30:M60"

There are 31 rows in range(M30:M60).
That appears to be the correct answer.
Were you expecting range(M30:M31)?
--
Jim Cone
Portland, Oregon USA




keiji kounoike

Specifying a range for sorting.
 
Instead of your code below

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))


Try this one.

Set currRange2 = currRange.Resize(AccountLastRow - currRange.Row, 1)

P.S.
Do not add ActiveSheet before currRange like

Set currRange2 = ActiveSheet.currRange.Resize(AccountLastRow -
currRange.Row, 1)

Keiji

DocBrown wrote:
I'm sure I'm missing something simple.... I seem to be missunderstanding how
to create the range I need. I also may be trying to be too efficient with my
use of the range so, maybe I need to consider that.

I'm trying to gather unique values from a column of data, and sort it before
I put it into another area of the WS.

I have a named range "AcctList" RefersTo: $M$30:$M$160

I have a function Last that will find the last row number that has data
within the range passed in. So I want to take the Range("AcctList") and
create a new range that contains cells from the beginning of "AcctList" to
the last row determined by my function Last.

I currently have this:


Set currRange = ActiveSheet.Range("AcctList")
AccountLastRow = Last(1, currRange)
If AccountLastRow <= 0 Then Exit Function ' no data in range.

Set currRange2 = ActiveSheet.Range(currRange.Cells(1),
currRange.Cells(AccountLastRow))

But if AccountLastRow is 31, then the range is $M30:M60.

What is the correct way to use that AccountLastRow to specifiy the range?
Once I have this range, I already have the Unique and sort functions complete.

Thanks,
John S.



All times are GMT +1. The time now is 05:37 PM.

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