Since I've been helping my (non-GIS user) brother with this lately:
Essentially you have to join your data table to your shapefile, but since XLS aren't readable by QGIS, you can use CSV and accomplish the same thing.
- open your XLS and remove all formatting from the sheet, if any (ie. colours or lines or anything like that)
- ensure all the column names are short and without spaces
- note the column that holds the ZIP CODE value
- save the XLS as a CSV from excel
- using QGIS, go to the menu option Layer > Add Layer > Add Delimited Text Layer
- Browse to your CSV
- ensure the option for 'No Geometry (attribute table only) is selected next to "Geometry definition"
- once the CSV has been added to the map, open the properties (right-click / properties) for the CSV and select the 'Fields' section on the left-hand side
- Ensure all the field types are being read as INT values (rather than String, so you can do your mapping correctly) Close the properties when finished checking.
- Add your ZipCodes.shp to the map
- Right-click the ZipCodes.shp layer and open the Properties
- Select Fields from the left-hand side and note which field stores the ZIP CODE value
- Access the Join option on the left-hand side
- Click the little green cross in the bottom left of the dialogue box
- ensure the Join Layer is your CSV file
- ensure the join field and target field are the ZIP CODE value fields from each of your SHP and CSV as you checked above
- click OK
- check the Fields setting on the left, and ensure the fields from the CSV have been added to the SHP
You should now be able to do your mapping...