Arte SheetsLearn. Try. Understand.

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 FormulaDeliverable (B)Displayed Number
=IF(ISBLANK(B2), "", COUNTA($B$2:B2))Wireframes1
=IF(ISBLANK(B3), "", COUNTA($B$2:B3))(blank spacer)""
=IF(ISBLANK(B4), "", COUNTA($B$2:B4))Backend API2
=IF(ISBLANK(B5), "", COUNTA($B$2:B5))Load testing3

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.

Further reading