I've always like just using rows.count to find the bottom, the doing and xlup
lastR= someWorksheet.cells(rows.count, someColumnNumber).end(xlup).row
For last column you have the similar columns.count
lastC= someWorksheet.cells(someRowNumber, columns.count).end(xltoleft).column
--edit--
The 1st and 3rd example you posted are similar, but you can get around using the "range(Adress)" and just use Cells(row#,col#)
Your second example fails because the find method will be null (is Nothing) and there for can't be referenced by .end(xlup).
I would get in the habit of NOT using the "Range(J & Rows.count)" kind of statement. Basically it works just fine, but if someone edits the sheet you will have to edit the macro.
Usually, it's handy to give the column headers a distinctive name, then used FIND to locate that column and pass in the column number. For example,
lastR= someWorksheet.cells(rows.count, someWorksheet.cells.find("myHeaderName").column).end(xlup).row
I like that last example because you can edit the sheet (and therefore move some columns around possibly) and not worry about having to track down hard-coded references (like your Range("J" & rows.count) example).
AVOID HARD-CODED REFERENCES!
Bookmarks