Looks more elegant than a loop, definitely, but it may be not a good idea to change marks, especially when you deploy your script to other users. I thought about that and with a little reading in the Vim documentation I found this way to do it:
Code:
"Get the line number of the current cursor position
"for info on that look at http://vimdoc.sourceforge.net/htmldoc/eval.html#line()
:let cLine = line(".")
"Since in your case lno already contains the number of the last line
"in the block more math is not necessary, of course any kind of arithmetic
"to determine the last line can be done here
"Okay, now we need to create the command to delete the block and execute it
"More info: http://www.cs.csubak.edu/docs/vim/eval.html#:execute
:execute cLine . "," . lno . "d"
"For some reason you can't execute the command directly like
":cLine,lnod
"This will throw an error E488
This solution looks more complicated, but will not touch marks (that are possibly already set by the user).