Lookup & Reference
Add row numbers and skip blanks: sequential numbering with expanding COUNTA
Use IF(ISBLANK(B2), "", COUNTA($B$2:B2)) so populated items number 1, 2, 3 without gaps across blank spacer rows.
Why ROW() leaves numbering gaps across blank spacer rows
Project checklists and invoices often leave blank separator rows between phases. Using ROW(B2)-1 numbers rows 1, 2, 3, 4—so if row 3 is a blank spacer, the next real item jumps from #1 to #3!
An expanding range $B$2:B2 inside COUNTA counts only populated items from the top down to the current row, while IF(ISBLANK(B2), "", ...) leaves blank spacer rows clean.
This version skips truly empty cells only. Spaces and formulas returning an empty string are not blank to ISBLANK and are counted by COUNTA. Clean those inputs or use an explicit qualifying-row test if they should also be skipped.
| ItemNo Formula | Deliverable (B) | Displayed Number |
|---|---|---|
| =IF(ISBLANK(B2), "", COUNTA($B$2:B2)) | Wireframes | 1 |
| =IF(ISBLANK(B3), "", COUNTA($B$2:B3)) | (blank spacer) | "" |
| =IF(ISBLANK(B4), "", COUNTA($B$2:B4)) | Backend API | 2 |
| =IF(ISBLANK(B5), "", COUNTA($B$2:B5)) | Load testing | 3 |
Lock the top anchor ($B$2) and leave the bottom relative (B4)
At row 4 (Backend API), $B$2:B4 spans two populated items and one blank, so COUNTA($B$2:B4) returns 2.
=IF(ISBLANK(B4), "", COUNTA($B$2:B4))Inserting a new item renumbers subsequent rows automatically
Typing a deliverable into B3 turns B3 into #2 and bumps Backend API (B4) to #3 automatically.
=IF(ISBLANK(B3), "", COUNTA($B$2:B3))Try the example
Use the original values or change them to test your understanding.