Explanation
When given a single cell reference, the ROW function returns the row number for that reference. However, when given a range with multiple rows, the ROW function will return an array that contains all row numbers for the range:
{5;6;7;8;9;10}
To get only the first row number, we use the MIN function like this:
MIN(ROW(data))
which returns the lowest number in the array, 5.
Once we have the first row, we can just add the total rows in the range then subtract 1 to get a final result. We get total rows in the range with the ROWS function, and a final result is determined like this:
=5+ROWS(data)-1
=5+6-1
=10
Index version
Instead of MIN, you can also use INDEX to get the last row number:
=ROW(INDEX(data,1,1))+ROWS(data)-1
This is possibly a bit faster for large ranges, since INDEX returns just a single cell to ROW.
Simple version
When a formula returns an array result, Excel will display the first item in the array if the formula is entered in a single cell. This means that in practice, you can often just use a simplified version of the formula:
=ROW(data)+ROWS(data)-1
However, inside formulas, it may be necessary to make sure you are dealing with only one item, and not an array. In that case, you'll want to use the the MIN or INDEX version above.