Just for clarity - then the shipping rates table has 246 rows, one for each country? I've created that table but in doing so I'm thinking that will need a lot of work to update shipping costs.
How about 2 tables:
1. ShipCountryZones which list the 246 countries with columns for country 2 letter abbreviations and the zones as a key column
2. ShipZoneRates with the 9 rows for zones and columns for Zone Base rate, Zone Increment and Zone fuel surcharge
I would then INNER JOIN the look up recordset with the two tables, the main table being ShipCountryZones and the child table being ShipZoneRates.
Would that work?