It seems I broke a rule by linking to a video explaining my solution so let me try and describe it here.
The reference data is on Sheet3 in Excel tables, as described.
Each Table is then selected and Formulas, Create from Selection used to give each a name using the heading (paying attention that Names can't have spaces, hyphens, etc). The accounting code name must be the first character of that Category followed by the text "code".
Sheet3
[TABLE="class: outer_border, width: 894"]
<colgroup><col><col><col><col span="3"><col><col span="2"><col><col span="2"><col><col></colgroup><tbody>[TR]
[TD]Category
[/TD]
[TD][/TD]
[TD][/TD]
[TD]Office
[/TD]
[TD]Ocode[/TD]
[TD][/TD]
[TD]Executive[/TD]
[TD]Ecode[/TD]
[TD][/TD]
[TD]Meeting[/TD]
[TD]Mcode[/TD]
[TD][/TD]
[TD]Conference[/TD]
[TD]CCode[/TD]
[/TR]
[TR]
[TD]Office[/TD]
[TD][/TD]
[TD][/TD]
[TD]Staples[/TD]
[TD]O6653-44[/TD]
[TD][/TD]
[TD]Private Jet[/TD]
[TD]E9982-11[/TD]
[TD][/TD]
[TD]Coffee[/TD]
[TD="colspan: 2"]M9292-11[/TD]
[TD]Hotel[/TD]
[TD]C7732-21[/TD]
[/TR]
[TR]
[TD]Executive[/TD]
[TD][/TD]
[TD][/TD]
[TD]Paper[/TD]
[TD]O6653-88[/TD]
[TD][/TD]
[TD]Massage[/TD]
[TD]E9982-01[/TD]
[TD][/TD]
[TD]Cake[/TD]
[TD="colspan: 2"]M9292-55[/TD]
[TD]Hire Car[/TD]
[TD]C7732-43[/TD]
[/TR]
[TR]
[TD]Meeting[/TD]
[TD][/TD]
[TD][/TD]
[TD]Stamps
[/TD]
[TD]O6653-77[/TD]
[TD][/TD]
[TD]Private Box[/TD]
[TD]E9982-44[/TD]
[TD][/TD]
[TD]Projector[/TD]
[TD="colspan: 2"]M9292-25[/TD]
[TD]Breakfast[/TD]
[TD]C7732-76[/TD]
[/TR]
[TR]
[TD]Conference[/TD]
[TD][/TD]
[TD][/TD]
[TD]String[/TD]
[TD]O6652-92[/TD]
[TD][/TD]
[TD]Opera[/TD]
[TD]E9982-91[/TD]
[TD][/TD]
[TD]Flipchart[/TD]
[TD="colspan: 2"]M9292-65[/TD]
[TD]Per Diem[/TD]
[TD]C7000-01[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Cups
[/TD]
[TD]O6653-12[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD]Laser Pointer[/TD]
[TD="colspan: 2"]M9292-22[/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
</tbody>[/TABLE]
The Expense Type LoV is created using Data, Data Validation, List and in the Source =Category so it picks up the entries from the Category table.
The Expense Account LoV is created using Data, Data Validation, List and in the Source is =INDIRECT($F$17) so in this example it takes the selected text "Conference" and INDIRECT treats it as a name to the Conference table so we get the dropdown Hotel, Hire Car, Breakfast, Per Diem.
For the Expense Account Code we INDEX into the correct Account Code table by constructing an Excel Name of the first letter of the Category (so that's why we named the account code tables OCode, ECode, MCode and CCode) and append the text "code" which then INDIRECTly access the correct accounting code teable (in this case CCode).
Then we get the row by MATCHing INDIRECTly the Expense Account row which matches.
=IFERROR(INDEX(INDIRECT(LEFT(F17,1)&"code"),MATCH(I17,INDIRECT(F17),0)),"")
Sheet2
[TABLE="class: outer_border, width: 578"]
<colgroup><col span="3"><col span="6"><col span="3"><col></colgroup><tbody>[TR]
[TD="colspan: 2"]Expense Type LoV[/TD]
[TD][/TD]
[TD="colspan: 7"]Expense Account LoV
[/TD]
[TD][/TD]
[TD="colspan: 2"]Expense Account Code
[/TD]
[/TR]
[TR]
[TD="colspan: 2"]Conference[/TD]
[TD][/TD]
[TD="colspan: 7"]Hire Car
[/TD]
[TD][/TD]
[TD="colspan: 2"]C7732-43[/TD]
[/TR]
</tbody>[/TABLE]