I saw this sequencing challenge from **Chandoo** “**Generate a new sequence number when value changes**“. His formula solution is great but I kept thinking “**What if we have 20000 rows?**“

**What Does Sequencing Mean?**

Each time we see a new Value it gets the max value above plus 1. If it’s a repeat Value then it gets the same Sequence number that was initially assigned.

**Chandoo’s Formula Solution**

=IFERROR(VLOOKUP(B4,$B$3:C3,2,FALSE),SUM(MAX($C$3:C3),1))

Notice the expanding ranges. 1st cell is locked and 2nd is unlocked $B$3:C3 and $C$3:C3

If the Value already exists above VLOOKUP retrieves that sequence number. If VLOOKUP can’t find the Value (it’s new) then IFERROR gives us the max value from above. Visit **chandoo**!

**What If We Have 20000 Rows?**

Expanding ranges on large data-sets are **slow** to calculate. What can we do? Some ideas:

**a) helper formulas, pivot table, vlookup**(pivot requires refresh but so easy & quick)**b) 4 step formula solution**(faster than expanding ranges but requires some thought)**vba**(should be possible by vba experts)**Get & Transform**(is this possible Ken Puls / Miguel Escobar?)

**a) Helper Formulas & Pivot Table & Vlookup**

Two helpers alongside the data: **counter** and **match function**. If the numbers are the same it’s the 1st occurrence of that number. We’ll need these rows in the pivot. Add a 2nd counter beside the pivot. A vlookup back in column E looks into the pivot & 2nd counter (columns I & J). The pivot saves some formula calculation time and it’s easy to explain. Get the **Excel file(1 MB)**.

**b) 4 Step Formula Solution**

Calculates in seconds but takes some time to understand how it works. Follow along (**Excel file 1 MB)**.

**Step 1 add a counter**

Type 1,2,3 and drag it down (or use the ROW function).

**Step 2 =MATCH(B4,$B$4:$B$20003,0)**

MATCH looks for value in column B. If MATCH position number = counter number then it’s a new value.

**Step 3 max so far =MAX(G5,F4)**

I type a 1 in cell F4. In cell F5 the MAX formula compares two values to see which one is bigger. As I drag this formula down I’ll always have the max sequence number close for when it’s needed!

**Step 4 =IF(D5=E5,F4+1,INDEX($G$4:$G$20003,E5))**

I type a 1 cell G4. In cell G5 I use the formula above. Let’s look at each part:

**=IF(D5=E5,F4+1,**** ** if **step 1** = **step 2** we know it’s a new value so we increase our sequence number.

**INDEX($G$4:$G$20003,E5))**** **if it’s a repeat value we use index with match number to get it.

**Conclusion**

My solutions work well with 20000 rows of data. If the amount of data keeps increasing (ie 500000 rows) consider more robust solutions (vba, get & transform) to automate the sequence generation.

**Get & Transform**

Can Get & Transform solve this? I’m currently enrolled in **Power Query Academy**. Why not sign-up and join me? Disclaimer: I’m also an affiliate for this course.

**About Me**

My name is Kevin Lehrbass. I live in Markham Ontario Canada. I’m a Data Analyst. This is my personal blog about Microsoft Excel.

I had two challenges this past weekend:

- Chandoo’s sequencing challenge
- Snow shoveling challenge

Mental and physical exercise!

Pingback: False Friends in Excel | My Spreadsheet Lab

Hi Kevin,

Here is my Suggestion,

=MATCH(MATCH($S$14:$S$24,$S$14:$S$24,0),MODE.MULT(IFERROR(MATCH(ROW($S$14:$S$24)-ROW($S$14)+1,MATCH($S$14:$S$24,$S$14:$S$24,0),{0,0}),””)),0)