Why do you wrap a table around the return value from select? And select(1,...) is kind of redundant since that just passes on ...? Your code makes no sense to me.
Also, it has the same issue as all the ones above it in that it won't account for mouseover targetting on the Rebirth cast. That one, however, makes it impossible (for me, at least) to get the macro below the 255 character limit without losing functionality.
The closest that I got was the following at 293 characters:
Code:
#showtooltip
/cast [nocombat]Revive
/stopmacro [nocombat]
/run local s,_,u=20484,SecureCmdOptionParse("[@mouseover,help,dead][@target]")if GetSpellCooldown(s)==0 and UnitInRange(u)then SendChatMessage(GetSpellLink(s).." -> "..UnitName(u),"RAID")end
/cast [@mouseover,help,dead][]Rebirth