Return a range from A1 to the true last used cell
You need to make these mods to the code
- The sheet may be blank, so you should never use
Select
withFind
as this will give an error if the Find returns nothing. Instead test that the range objectIs Not Nothing
-
Find
can search by row and by column. You need to determine both last row and column to determine the true last used cell - Once you have determined the true last cell use
Range
to set a range from the first cell (A1) to your cell determined with the twoFind
ranges
Pls see the code below
If the Find
gets a value then it makes a range rng3
from A1 to the last used cell identified by the two Find
s.
Sub GetRange()
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column))
MsgBox "Range is " & rng3.Address(0, 0)
'if you need to actual select the range (which is rare in VBA)
Application.Goto rng3
Else
MsgBox "sheet is blank", vbCritical
End If
End Sub
Selecting A1 to the last cell used (including blanks in-between) in Column A is as simple as this:
Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
To select A1 to the last cell used in the entire sheet (regardless if it's used in column A or not):
Range("A1:A" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row).Select
I figured out how to modify the code to select a range beginning at a specified cell, and ending at the last cell. On line 8, change the a1 to the cell you wish to start on. In my case, I chose j28.
Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
full code:
Sub GetRange()
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set rng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious)
Set rng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious)
If Not rng1 Is Nothing Then
Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column))
MsgBox "Range is " & rng3.Address(0, 0)
'if you need to actual select the range (which is rare in VBA)
Application.Goto rng3
Else
MsgBox "sheet is blank", vbCritical
End If
End Sub