Another option is to move your headings from row 1 to row 2 and put the required format in the first row.
If you want a stronger solution....
A client used an excel spreadsheet as a data entry form and I had the same problem of users putting notes against a date, putting two id's in the same cell etc.
I wrote a vba routine which ran when the user changed row (within the designated 'data entry' area) which validated the data for the whole record (row). There were around 30 columns and checks including data was of the right type and format, was typically in range, had been completed if required, etc. Any errors found were added to the end column as a note and the A1 cell would flag up there were errors and the record would be ignored when submitted for upload to the main db.
The upload was done with a submit button - a vba routine copied all rows completed without an error (it would do a final 'sweep' to ensure all validation have been completed) to a new workbook, and emailed the new workbook to the db user. Once the file had been emailed, a backup of the original workbook was filed in an archive folder with a date/timestamp and all completed rows deleted ready for further input by the excel user.