You could try something silly with BIN$ and INSTR.
?31-INSTR(BIN$(&H20000000,32),"1") 29It's shorter but I don't know if it meets your criteria for speed. It also works with the sign bit, if you need that I guess. EDIT: why not FLOOR the result instead of CEIL if the rounding error is an issue? Are you also dealing with negatives (somehow?) You can try using OR 0 to coerce the result into an integer instead of using a rounding function. This has the effect of just truncating the decimals, but obviously will break on really large numbers (but you'll never have anything greater than 31, will you?)
?CEIL(LOG(&H20000000,2) OR 0) 29The type conversion will have an effect on speed, but whether that's better or worse than you have now I of course don't know.