# (RANKEQ) Derivative Numbering System e.g. 1a, 1b, 2a, 2b, 2c etc.

Hello, I’m a bit stuck with creating a numbering system – can anyone help please?

I have a list of IDs, but some of these IDs I want to mark as derivatives of others and automatically label the derivatives with a letter ideally – but a number will do.

I need my formula to look down a column, count distinct numbers and where [Derivative?] is True assign a rank within that range of distinct numbers.

So the first item in that ‘group’ of distinct numbers that is checked True will be 1 (or a), the second in that group would be 2 (or b) and so on. From there I can relate the number to a letter and concatenate the results to give me my output Item ID.

I have another row ID column that is autonumbered that could drive the ranking.

Or am I overthinking this?

Hope someone can help.

Many thanks,

Jim

• @Jim give this a try:

=[Item ID]@row + IFERROR(CHAR(96 + RANKEQ([Row ID]@row, COLLECT([Row ID]:[Row ID], [Item ID]:[Item ID], [Item ID]@row, [derivative?]:[derivative?], 1), 1)), "")

• The COLLECT function is one of my absolute favorites! In this formula, first it finds the set of row ID #s that have the same Item ID, are checked off as derivative, to know which one to rank.

Then I'm taking advantage of the CHAR function https://help.smartsheet.com/function/char and the fact that the character number for a lower case "a" is 97. So if rank = 1, it does 96+1 to know that it's an "a". This will fail if you have more than 26 derivatives, so you might need to modify in that case.

• Not sure if I'm following correctly, but I think maybe a solution is moving that logic into the formula to prevent the circle?

=@row + @row + @row + IFERROR(CHAR(96 + RANKEQ([Row ID]@row, COLLECT([Row ID]:[Row ID], :, @row, :, @row, :, @row, [derivative?]:[derivative?], 1), 1)), "")

Or another might be having an intermediate "helper" column then the ultimate output of ITEM ID.

• @Jim give this a try:

=[Item ID]@row + IFERROR(CHAR(96 + RANKEQ([Row ID]@row, COLLECT([Row ID]:[Row ID], [Item ID]:[Item ID], [Item ID]@row, [derivative?]:[derivative?], 1), 1)), "")

• Perfect, Katie. Thank you so much.

Now to figure out how you did it!

All the best,

Jim

• The COLLECT function is one of my absolute favorites! In this formula, first it finds the set of row ID #s that have the same Item ID, are checked off as derivative, to know which one to rank.

Then I'm taking advantage of the CHAR function https://help.smartsheet.com/function/char and the fact that the character number for a lower case "a" is 97. So if rank = 1, it does 96+1 to know that it's an "a". This will fail if you have more than 26 derivatives, so you might need to modify in that case.

• That is so brilliant. Thank you, Katie. Jim

• I fixed it. Phew.

sorry @Katie G, me again. I ran into a problem here with a circular reference.

Didn't see this coming so I did not think to mention that the [Item ID] is a concatenation of 3 other columns and if [Derivative?] is checked I want to used the [Concatenated Output] rather than ++.

This means the IF formula in the [Item ID] column cannot run because it is referring to itself.

Is there a workaround here?

Thanks,

Jim

• Not sure if I'm following correctly, but I think maybe a solution is moving that logic into the formula to prevent the circle?

=@row + @row + @row + IFERROR(CHAR(96 + RANKEQ([Row ID]@row, COLLECT([Row ID]:[Row ID], :, @row, :, @row, :, @row, [derivative?]:[derivative?], 1), 1)), "")

Or another might be having an intermediate "helper" column then the ultimate output of ITEM ID.

• Thank you for your help, Katie.

Jim

## Help Article Resources

Want to practice working with formulas directly in Smartsheet?

Check out the Formula Handbook template!