Arte SheetsLearn. Try. Understand.

Lookup & Reference

Two-Dimensional VLOOKUP + MATCH Formula: Dynamic Row & Column Matrix Lookup

Replace brittle hardcoded VLOOKUP column numbers with MATCH(ColHeader, A1:D1, 0) or INDEX + MATCH + MATCH to query any row-and-column intersection dynamically.

Why hardcoding col_index_num = 3 breaks the moment someone inserts a column!

In a regional freight rate matrix with Zone IDs in A2:A5 and service tiers ("Ground", "2_Day_Air", "Overnight") across B1:D1, writing VLOOKUP(F2, A2:D5, 3, FALSE) hardcodes column 3—silently returning the wrong rate if a colleague inserts an "Economy" column! Replacing that static 3 with MATCH(F3, A1:D1, 0) computes the exact column offset across the full header span A1:D1 automatically!

Even better, verify that your MATCH header range starts at A1 (the exact leftmost column of VLOOKUP’s table_array A2:D5!), or cross-check with INDEX(B2:D5, MATCH(F2, A2:A5, 0), MATCH(F3, B1:D1, 0)) wrapped in IFNA(..., "Invalid Zone or Service Tier")!

Query Pair (Zone F2, Service F3)MATCH(F3, A1:D1, 0) Col IndexReturned Freight Rate ($)Why Dynamic Wins
("Zone_3", "2_Day_Air")Col 3 of A1:D1$48.50No manual column counting
("Zone_4", "Overnight")Col 4 of A1:D1$94.00Updates instantaneously on F2/F3 edits
("Zone_9", "Ground") — Missing#N/A -> IFNA Guard"Invalid Zone or Service Tier"Clean audit message

Two-Dimensional VLOOKUP + MATCH Dynamic Column Formula

Looks up Zone F2 down A2:D5 and dynamically selects column MATCH(F3, A1:D1, 0), catching missing zones or headers with IFNA.

=IFNA(VLOOKUP(F2, A2:D5, MATCH(F3, A1:D1, 0), FALSE), "Invalid Zone or Service Tier")

Equivalent INDEX + MATCH + MATCH Matrix Intersection Formula

Indexes directly into numeric body B2:D5 using independent row and column MATCH coordinates.

=IFNA(INDEX(B2:D5, MATCH(F2, A2:A5, 0), MATCH(F3, B1:D1, 0)), "Invalid Zone or Service Tier")

Try the example

Use the original values or change them to test your understanding.

Further reading