I approached this by effectively 'filling down'
First a calc to fill down:
if isnull(attr([Amt])) then previous_value(attr([Amt])) else attr([Amt]) end
So if Amt is null for that row, then use the row above. If previous_value cannot be calculated because it's the first row use Amt (this is the part in the bracket after previous_value), otherwise just use Amt.
Then we can do the lookup as before:
Doing it this way avoids issues where there may be two nulls in a row. If the first row is a null, then this will result in a null in the second row for the lookup.
This is the test table I used:
Cpy Amt Fill Down along Table (Down) Lookup Prior along Table (Down) A B 23.00 23.00 C 45.00 45.00 23.00 D 45.00 45.00 E 64.00 64.00 45.00 F 34.00 34.00 64.00 G 34.00 34.00 H 34.00 34.00 I 34.00 34.00 34.00 K 45.00 45.00 34.00
Brilliant - thanks