# Excel : Auto Unique Number Generation D Patel used Ask the Experts™
on
Hi Experts,

I need to generate unique number as per the following format...

This Unique Number comprises of 4 sections.
Suppose, Number is "E17100007" (which is unique)

1. E is first character from Column B
2. 17 is 2 digit Year from Date Column (C)
3. 10 is 2 digit Month from Date Column (C)
4. 0007 is four digit number which will grow by 1 within its group. (Consider that this number does not exceed 9999 limit)

Where group is 'E1710' and number will be get incremented but if group changes then it will start from 0001.

When I use this formula it reset all the numbers falls after it.

It should not be actually.

It should first find out the maximum and and then increment. All the previously generated numbers should intact.

How to achieve the task? (If it is VBA than it will be better)

Sample file is attached?

Regards,
D Patel
UniqueNumber.xlsx
Comment
Watch Question

Do more with EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Distinguished Expert 2017

Commented:
If you want a VBA answer then you could use a User Defined Function (UDF) like this:
``````Function UniqueNumber(D As Date, Cat As String)
Dim Begin As Variant
Begin = Left(Cat, 1) & Right(Year(D), 2) & Format(Month(D), "00")
Dim Formula()
Dim Counter As Integer
Counter = 1
Formula = ActiveSheet.Range("E2:E" & ActiveCell.Row - 1).Value
For i = 1 To UBound(Formula)
If Begin = Left(Formula(i, 1), 5) Then
Counter = Counter + 1
End If
Next i
UniqueNumber = Begin & Format(Counter, "0000")
End Function
``````
Then to use it you will type this into the column that you want showing the results:
``````=UniqueNumber(C2,B2)
``````
And you will get a unique number for each group incrementing by 1.
Excel & VBA Expert
Most Valuable Expert 2018
Awarded 2015
Commented:
You may try something like this....

Either in C2 or in D2
``````=LEFT(B2,1)&RIGHT(YEAR(C2),2)&TEXT(MONTH(C2),"00")&TEXT(SUMPRODUCT(--((LEFT(B\$2:B2,1)&RIGHT(YEAR(C\$2:C2),2)&TEXT(MONTH(C\$2:C2),"00"))=LEFT(B2,1)&RIGHT(YEAR(C2),2)&TEXT(MONTH(C2),"00"))),"0000")
``````
and copy it down.
D Patel, Software Engineer

Commented:
@ Mike in IT : Number not generating (showing all groups as "0001")

please suggest if anything remain from my side.
Excel & VBA Expert
Most Valuable Expert 2018
Awarded 2015

Commented:
Why would you insert rows in between? But if want to insert the rows all you need is to copy the formula from the row above to down the rows that will update the unique numbers in the rows below .
D Patel, Software Engineer

Commented:
But once assigned the number should not change....
Excel & VBA Expert
Most Valuable Expert 2018
Awarded 2015

Commented:
I don't think that's possible as once you insert rows in between and fill the new rows, the formulas below will be automatically updated.
Distinguished Expert 2017
Commented:
Here you can try this
``````Function UniqueNumber(D As Date, Cat As String) As String
Dim Begin As Variant
Begin = Left(Cat, 1) & Right(Year(D), 2) & Format(Month(D), "00")
If ActiveCell.Row = 2 Then
UniqueNumber = Begin & "0001"
Exit Function
End If
Dim Formula()
Dim Counter As Integer
Counter = 1
Formula = ActiveSheet.Range("E2:E" & ActiveCell.Row).Value
For i = 1 To UBound(Formula) - 1
If Begin = Left(Formula(i, 1), 5) Then
Counter = Counter + 1
End If
Next i
UniqueNumber = Begin & Format(Counter, "0000")
End Function
``````

It does work for me, though I have it in column G, not D or E.

As for being able to insert rows in the middle of your data and having the formulas not recalculate, that is not possible. Every time you insert data they will all recalculate and update all the numbers below. If you don't want them to change then once you have your numbers then you will have to do a copy/paste values so that it is just a value and not a formula. Then you can do an insert, but my code will not take into account anything below it for generating the unique numbers.
D Patel, Software Engineer

Commented: 