You can use the following in cell D2
:
=IF(A2:A100="","",IFERROR(XLOOKUP(B2:B100,TB_Exceptions[License],
TB_Exceptions[Office]), IFERROR(XLOOKUP(C2:C100,
TB_CountryOffice[Country],TB_CountryOffice[Office]),
"CASE NOT FOUND")))
or using LET
function to facilitate maintenance of the formula:
=LET(nameRng, A2:A100, licRng,B2:B100, countryRng, C2:C100,
IF(nameRng="","",IFERROR(XLOOKUP(licRng,TB_Exceptions[License],
TB_Exceptions[Office]),IFERROR(XLOOKUP(countryRng,
TB_CountryOffice[Country],TB_CountryOffice[Office]),
"CASE NOT FOUND")))
)

Explanation
We are using a nested XLOOKUP
starting first with the most restricted search, i.e. the exceptions, and in case of #N/A
then it looks for the regular country lookup table. We consider the CASE NOT FOUND
as a last resort in case some lookup value was not defined.
We are using Excel Tables to have dynamic ranges in the lookup tables. For the initial data set we don't use it, because for Excel Tables Spilled array formulas aren't supported, i.e. it returns #SPILL!
error.
We define the data input ranges larger than the actual input data set, in case we want to include additional data. We add the initial condition: IF(A2:A100="","",..)
to treat the blank lines of the input table.