mmm, I liked the sound of Meatros’ solution but I couldn’t get it to work. But based on it, I came up with a formula you can use. (This was a learning experience for me… usually I do what Cheesesteak just described.)
Assumptions based on your OP: Your Excel workbook comprises at least two worksheets, including ones named Spreadsheet A and Spreadsheet B. Both use Row 1 for column headings. Spreadsheet A uses Rows 2-1001 and Columns A, B, and C for the data you described; similarly, Spreadsheet B uses Rows 2-501 and Columns A, B, and C for the data you described.
If so, paste the following into Spreadsheet A, Cell D2:
=INDEX(‘Spreadsheet B’!$C$2:$C$501,MATCH(1,(A2=‘Spreadsheet B’!$A$2:$A$501)*(B2=‘Spreadsheet B’!$B$2:$B$501),0))
Like Meatros’ described, this is an array formula, so it won’t work unless you enter it as an array formula… when you paste it in or otherwise edit this cell, finish editing by hitting SHIFT-CTRL-ENTER. When you do, the formula will appear with brackets around it:
{=INDEX(‘Spreadsheet B’!$C$2:$C$501,MATCH(1,(A2=‘Spreadsheet B’!$A$2:$A$501)*(B2=‘Spreadsheet B’!$B$2:$B$501),0))}
Copy Cell D2 into cells D3 through D1001. Now Column D should contain email addresses for the 500 people you have them for, and error messages for the other 500. There is probably a way to edit the formula to output something nicer than an error message for the latter, but hopefully this will get you off to a good start.