Two-way lookup with VLOOKUP
Inside the VLOOKUP function, the column index argument is normally hard-coded as a static number. However, you can also create a dynamic column index by using the MATCH function to locate the right column. This technique allows you to create a dynamic two-way lookup, matching on both rows and columns. It can also make a VLOOKUP formula more resilient: VLOOKUP can break when columns are inserted or removed from a table, but a formula with VLOOKUP + MATCH can continue to work correctly even changes are made to columns.
In the example, we are using this formula to dynamically lookup both rows and columns with VLOOKUP:
H2 supplies the lookup value for the row, and H3 supplies the lookup value for the column.
How this formula works
This is a standard VLOOKUP exact match formula with one exception: the column index is supplied by the MATCH function.
Note that the lookup array given to MATCH (B2:E2) representing column headers deliberately includes the empty cell B2. This is done so that the number returned by MATCH is in sync with the table used by VLOOKUP. In other words, you need to give MATCH a range that spans the same number of columns VLOOKUP is using in the table. In the example (for Feb) MATCH returns 3, so after MATCH runs, the VLOOKUP formula looks like this:
Which returns sales for Colby (row 4) in Feb (column 3), which is $6,786.