How to display a column of sequential number to visible rows only?

Got this question from a friend. Her task is simple as shown below:

I guess many people wanted to achieve the same thing but have no idea at all. Are you one of them?

Actually, the solution is simple, simpler than you may have thought about.

In our example, input the following formula in A2 and then copy down:

=SUBTOTAL(103,$B$2:B2) 'pls pay attention to where the $ are

As simple as that. 🙂

Normally it is easier to explain the logic of the formula from the beginning cell. But for this case, I think the opposite may illustrate better.

Firstly let’s take a look at the syntax of SUBTOTAL

SUBTOTAL(function_num,ref1,[ref2],…])

The first argument function_num can be any number from 1 to 11 (includes hidden values) or 101-111 (exclude hidden values) that specifies what function to use in calculating subtotal to the range specified (i.e. ref1 as the second argument).

Then let’s look at our example

function_num **103** is used. That simply asks Excel to do COUNTA (i.e. count the number of cell that is not empty) to the range $B$2:B11 but ignoring hidden rows (either by filter or just by hiding).

Now look at the formula in A11, which is

=SUBTOTAL(103,$B$2:**B11**)

Pay attention to the reference made to $B$2 (absolute reference) and B11 (relative reference). That’s why you will see the range changes to $B$2:**B11** and $B$2:**B5** when you are looking into the formula in **A11** and **A5** respectively. Literally it means a range “from the the row assigned a to the **active **row”.

The range $B$2:**B2** changes dynamically according to the position of the formula. It always refers to the top row (in our case Row 2) of the table to the active row of formula.

To put everything together, the formula does the simple job to count, from the top row to the active row, how many cell(s) is non-blank, ignoring hidden rows. Therefore in A11, it gives you the answer of 5 correctly when you filter for “Wholesales”.

Now let’s look at the changes in formula row by row in the filtered range.

See? This is in effect to show a list of sequential number starting from 1 to the last visible row.

*Tip: You may refer to any column with non-blank data, e.g. $C$2:C2 or $D$2:D2 both yield the same result, as long as there is no blank cell in the range.*

Note: You may find that Filter refuses to include the last row with the formula start with SUBTOTAL. For workaround, please read next post: Interesting bug – Filter with SUBTOTAL.

Want to know more about SUBTOTAL? Please read

The chance of writing effective formula is higher, when you truly see the difference between relative and absolute references.

This works great and is much simpler than other, similar methods I’ve seen.

One addition I made, because I was using it to number visible rows, based on a priority (sorted/filtered criteria) or dragged/dropped (I can drag this row to the top to force it to be number one) was to replace the dynamic field (i.e. A2) to an indirect reference (INDIRECT(“A”&ROW()).

Doing this meant that if I moved my row up manually, it would reassess the row and then return the desired ranking.

LikeLike

Glad to hear that you can modify it to fit your situation 🤗

👍🏻

LikeLike

Simply superb!

LikeLike

Thank you Prashant 😉

LikeLike

Hi..

Thanks!!! It worked for me. However, would like to inform that my filter wasn’t working properly after applying the formula.

Is it for everyone? Or I am making some mistake?

LikeLike

That’s really good thanks.

LikeLike

Thanks. Glad to know you like it. 😃

LikeLike

Works like a charm! 🙂 Thanks

LikeLike

Welcome. Glad you like it.

LikeLike

formula works only when filter is on and then we inactive filter sequence formula not worked

LikeLike

Does anyone have any method on how to make the sequence number maintain as is when filter is turned off?

LikeLike

thanks

LikeLike

Welcome

LikeLike

didnt work dude

LikeLike

In what way?

LikeLike

In above example, it sequence the number only one filtered data, but I need sequence number for several group of filtered data at the same time. Thanks in advance for help.

LikeLike

Hi Solaman,

The formula works for visible rows. Therefore it works even you have more than one field filtered. Try it out.

Hope this helps.

LikeLike

Unfortunately, this does not work for tables (list objects). Do you have a solution for tables?

LikeLike

Hi Frank,

Thanks for your question.

You may do it in Tables. What you need to do is to make a minor revision to the formula:

=SUBTOTAL(103,$B$2:[@Division])

Note: You need to input $B$2: manually.

Cheers,

LikeLike

Hi Ming Fung,

very nice solution. Thanks!

LikeLike

Hi Frank,

You are welcome. Glad it helps.

Just to remind: You may find that the Filter refuses to that the last row with SUBTOTAL. For a workaround, please read next post.

https://wmfexcel.com/2015/05/16/interesting-bug-filter-with-subtotal/

Cheers,

LikeLike