I use this type of thing a lot when I know I have a static start point and need to find the end of a list and complete some actions with it. Below is a sample of code that I use to create a named range for later use. Essentially it go's to the know static cell, tests for data in the cell below and then steps to the last row in the series. To work properly there can be no blank rows.
Sub Set_Transaction_Range()
ThisWorkbook.Sheets("Transaction List").Activate
Range("A4").Select
If ActiveCell.Offset(1, 0).Value <> "" Then
Selection.End(xlDown).Select
Else
ActiveCell.Offset(1, 0).Select
End If
ActiveWorkbook.Names.Add Name:="Transaction_Data", _
RefersTo:="='Transaction List'!$A$3:$F$" & ActiveCell.Row
End Sub
Make sure you include the $ sign when setting the name otherwise the range has tendency to 'move', caused me no end of grief until I worked out what was happening. Naming the range means you can refer back to it later without having to repeat the process.
Hope this helps,
Scott.