I would disagree (again) sorry AL !
1. AL is right though, about the lack of a short circuit evaluation.
Nest your if checks according to most likely to be false (i.e. not execute the inner checks).
2. A spriteX check and a SpriteY check will be cheaper than a collision check (in most cases).
I wouldn't worry massively about logic execution speed. You'd have to go some to exhaust the CPU on this kind of action, but it's still good programming technique to be efficient.
By far the biggest killer is fillrate and drawing in general.
3. I see you are setting the alpha to 0 on the sprite rather than making it invisible (or even delete it if it is more appropriate).
Not only is the sprite still going to be sent to the renderer but it will be checked again on future frames. You should consider a method like this:
Instead of having your coin sprites in an array of integers, use a UDT like:
type tCoin
x# as float
y# as float
ID as Integer
Active as Integer
endtype
Dim MyCoins[100] as tCoin
When you create the coins, you can manage them much better like this. Also, you can have many other properties which make this method pretty much indispensable.
When you process your coins for collisions for instance, your outer check looks at MyCoins[x].Active first, THEN try position or collision checks. Obviously you set the Active property on or off, depending on the coin's status