Assuming you have inserted the data into Oracle perhaps using an external table, you could use the connect by clause of a hierarchical query to generate the additional rows you need.
Setup to simulate the source data:
DROP TABLE t1;
DROP TABLE t2;
CREATE TABLE t1 (Zip Varchar2(7), Ground Varchar2(3), Air Varchar2(3));
INSERT INTO t1 VALUES ('010-041','005','305');
INSERT INTO t1 VALUES ('150-163','004','304');
Solution:
CREATE TABLE t2 AS (
SELECT substr(zip,1,3) + Level - 1 Zip, Ground, Air
FROM t1 a CONNECT BY level <= substr(zip,5,3)-substr(zip,1,3)
);
If you'd rather do more work on the Excel side, then you could create the following table in Oracle:
CREATE TABLE t1 (Zip Number(3), Ground Varchar2(3), Air Varchar2(3));
Then run a formula like this for each row in Excel:
=CONCATENATE("INSERT INTO t1 (SELECT ",MID(A2,1,3),
"+Level-1,'",B2,"','",C2,"' FROM dual connect by level <=",MID(A2,5,3)-MID(A2,1,3),");")
This will produce insert statements that you can then run in Oracle. They will look like this:
INSERT INTO t1 (SELECT 010+Level-1,'005','305' FROM dual connect by level <=31);