I would do it one of three ways:
First:
1. insert unvalidated data into table specifically created for this purpose - this can be easily done by simply importing your excel sheet.
2. validate everything in the table, marking or correcting valid/invalid
3. do a bulk insert of validated data from the table
4. after successful insert into "real" table, clear the temporary one (or drop it if its one-time job)
Second (not sure this would work due to number of records, but it worked for me on 2000+ records - lasted all of three seconds):
1. Create XML containing your excel data in some simple format
<all_data>
<row col1="x" col2="4" col3="7.5" etc...="" />
<row col1="x" col2="4" col3="7.5" etc...="" />
</all_data>
2. Pass that XML as parameter to the stored procedure
3. Insert directly from that XML parameter, since you need validation first, maybe create table variable to hold and validate the data before insert
4. if you did table variable validation, then you need to insert from that table