MATCH scans the lookup_array from top to bottom (for columns) or left to right (for rows) and returns the position number of the first cell that matches the lookup_value. Position 1 is the first cell in the range, regardless of which row or column that cell is actually in on the sheet. With match_type 0, matching is exact and case-insensitive. Always specify 0 explicitly — omitting match_type defaults to 1 (approximate match on sorted data) which returns silently wrong results on unsorted lists. MATCH returns #N/A when no match is found — wrap it in
IFNA for a clean not-found message. The most important use of MATCH is inside INDEX: INDEX(return_range, MATCH(lookup_value, lookup_range, 0)) is the
INDEX MATCH pattern that replaces
VLOOKUP with no column-count restriction and no left-column requirement. For two-way lookups, use MATCH twice — once to find the row position and once to find the column position — then pass both results to a single INDEX.