VBA Selecting range only containing data

Jase Alexander
Jase Alexander used Ask the Experts™
on
HI Guys

Im using this bit of code which I thought would select Column A to FF and go to the last row containing data in this range.

Sub selectrange()
Dim r As Long
r = Range(Selection, Selection.End(xlDown)).Row
Range("A" & Selection.Row, "FF" & r).Select
End Sub

It is only selecting the first row for some reason and Im not sure what the issue is.

Would you be able to help me on this?

The attached example should result in the range A1:FF31 being selected when the code is run but unfortunately, im missing something ..

J
Book1.xlsm
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2016

Commented:
Hi,

pls try ( in your code the row is the first row of the range=1)
Sub copyrange()
Dim r As Long
r = Selection.End(xlDown).Row
Range("A" & Selection.Row, "FF" & r).Select
End Sub

Open in new window

Regards
r = Selection.End(xlDown).Row
Jase AlexanderCompliance Manager

Author

Commented:
HI Guys

Thank you for the quick response

It work great except is there an addition to the code whereby it ALWAYS selects from cell A1 and the subsequent range containing data?

At the moment, if I click in cell d8 and run the code, it only selects the rows and range starting below this location?

If not, no problems I can work with this

Regards
J
Top Expert 2016

Commented:
then try

Sub copyrange()
Dim r As Long
r = Selection.End(xlDown).Row
Range("A1", "FF" & r).Select
End Sub

Open in new window

Jase AlexanderCompliance Manager

Author

Commented:
HI RG

I tried the A1 change but what happens is if you click in A1 and then run the code, it works perfect.

If you click anywhere else on the sheet and run the code, it selects the WHOLE sheet from cell A1

However, no problems, I can work with this

Thank you for your help

J
Rob HensonFinance Analyst

Commented:
Are columns A to FF the only used columns?

If so just selecting Used.Range will do the same:

ActiveSheet.UsedRange.Select

Open in new window


Alternatively, determine the last row using LastCell:

LR = ActiveCell.SpecialCells(xlLastCell).Row

Open in new window

Rob HensonFinance Analyst

Commented:
What are you doing with the range once it is selected?

It is often not necessary to use the .Select method with a range; you may be able to do the actions without selecting the range.

Thanks
Rob H
Top Expert 2016
Commented:
or maybe
Sub copyrange()
ActiveCell.CurrentRegion.Select
End Sub

Open in new window

Try the below (removing the final 'select' and replacing it with your processing code):
Sub selectLastRow()

    Dim wksTargetSheet As Worksheet
    
    Dim rngAllData As Range
    Dim rngLastRow As Range
    
    Set wksTargetSheet = ActiveSheet
    
    Set rngAllData = wksTargetSheet.Range("A1").CurrentRegion
    
    Set rngLastRow = rngAllData.Offset(rngAllData.Rows.Count - 1).Resize(1)
    
    rngLastRow.Select ' Or whatever you want to do with the row
    
End Sub

Open in new window

Roy CoxGroup Finance Manager
Commented:
CurrentRegion will select all cells in a sheet that contiguous to each other surrounding a specified cell

UsedRange is the area of the sheet that has been 'Used' for any purpose, since it was last saved.

I would think that currentRegion is probably the best choice for you, e.g.

MsgBox Range("A1").CurrentRegion.address
MsgBox ActiveSheet.UsedRange.address

Open in new window

Jase AlexanderCompliance Manager

Author

Commented:
Cannot thank you guys enough

All suggestions were perfect in their own merit

I have one happy finance team !
Roy CoxGroup Finance Manager

Commented:
Pleased to help.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial