Excel index match
Using INDEX&MATCH (single and dual condition) for dynamic lookups across rows and columns in Excel, including cross-sheet references.From its SKILL.md
npx -y skills add cxcscmu/SkillLearnBench --skill excel-index-matchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
2.7 KB, 823 tokens by cl100k_base, as published. Nobody here has run it
INDEX & MATCH for Two-Condition Lookups
Overview
INDEX&MATCH is preferred over VLOOKUP/HLOOKUP because it allows:
- Lookups by both row AND column simultaneously
- Lookups in any direction (not just left-to-right)
- Cross-sheet references with ease
Basic Syntax
=INDEX(data_range, MATCH(row_key, row_lookup_range, 0), MATCH(col_key, col_lookup_range, 0))
Two-Dimensional Lookup Pattern
When you need to find a value based on BOTH a row label (e.g., series code) and a column label (e.g., year):
=INDEX(Data!$H$21:$M$40,
MATCH($D12, Data!$B$21:$B$40, 0),
MATCH(H$10, Data!$H$4:$M$4, 0))
Explanation:
Data!$H$21:$M$40— the value table (rows = series, cols = years)MATCH($D12, Data!$B$21:$B$40, 0)— find the ROW where D12's series code appears in column BMATCH(H$10, Data!$H$4:$M$4, 0)— find the COLUMN where H10's year appears in row 40= exact match
Dollar Sign Anchoring for Drag-Copying
Use mixed references so formulas can be dragged across rows and columns:
=INDEX(Data!$H$21:$M$40, MATCH($D12, Data!$B$21:$B$40, 0), MATCH(H$10, Data!$H$4:$M$4, 0))
$D12— column D is fixed (series code column), row shifts when dragged downH$10— column H shifts when dragged right, row 10 is fixed (year header row)Data!$B$21:$B$40— fully fixed (lookup range never changes)Data!$H$4:$M$4— fully fixed (header row never changes)
Cross-Sheet Reference Format
=INDEX(SheetName!$A$1:$Z$100, ...)
Use ! to reference another sheet. Wrap sheet names with spaces in single quotes:
=INDEX('Sheet Name'!$A$1:$Z$100, ...)
XLOOKUP Alternative (Excel 365+)
=XLOOKUP(row_key, row_lookup_range, XLOOKUP(col_key, col_header_range, data_range))
For two-dimensional lookup with XLOOKUP (nested):
=XLOOKUP($D12, Data!$B$21:$B$40, XLOOKUP(H$10, Data!$H$4:$M$4, Data!$H$21:$M$40))
Common Pitfalls
- Always use
0(exact match) as third argument unless intentional approximate match - Ensure row lookup range has same length as first dimension of data_range
- Ensure col lookup range has same length as second dimension of data_range
- The
data_rangerows must align withrow_lookup_range, and cols withcol_lookup_range
Setting in Python (openpyxl)
from openpyxl import load_workbook
wb = load_workbook('file.xlsx')
ws = wb['Task']
# Set formula string directly
ws['H12'] = '=INDEX(Data!$H$21:$M$40,MATCH($D12,Data!$B$21:$B$40,0),MATCH(H$10,Data!$H$4:$M$4,0))'
wb.save('file.xlsx')
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.