Понадобилось недавно сделать генерацию уникальных ID. Ниже немного доработанное решение.
Возможности: Генерация случаных неповторяющихся комбинаций из символов латиницы и арабских цифр (опционально). Максимальное кол-во 40 символов (есть возможность добавить).
Может кому пригодится. Код
[vba]
Код
Sub GenerateRandomCombinations() Dim cl As New Collection Dim RandomCombination$, CountOfCombinations&, CountOfSymbols&, u&, SymNum As Integer
If CountOfSymbols ^ 9 < CountOfCombinations Then: MsgBox "Возможных уникальных комбинаций меньше чем требуется": Exit Sub:
On Error Resume Next Do RandomCombination = rndm(CountOfSymbols, SymNum) cl.Add RandomCombination, RandomCombination Loop While cl.Count <> CountOfCombinations
For u = 0 To cl.Count Cells(u + 1, 1).Formula = cl(u) Next
End Sub
Function rndm$(Optional i& = 14, Optional z As Integer = -1)
' i - целое число. Количество символов в комбинации. Максимум 40. Опционально. ' z - имеет 3 значения _ -1 в комбинации присутствуют цифры и буквы латиницы _ 1 в комбинации присутствуют только цифры _ 0 в комбинации присутствуют только буквы латиницы
Function s$(Optional z As Integer = -1) Dim x, t$ Select Case z Case 1 x = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "0") t = x((Int(1 + (Rnd() * 10))) - 1) Case 0 x = Array("B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", _ "Q", "R", "S", "T", "V", "W", "X", "Z", "A", "E", "I", "O", "U", "Y") t = x((Int(1 + (Rnd() * 26))) - 1) Case -1 x = Array("B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", _ "Q", "R", "S", "T", "V", "W", "X", "Z", "A", "E", "I", "O", "U", "Y", _ "0", "1", "2", "3", "4", "5", "6", "7", "8", "0", _ "0", "1", "2", "3", "4", "5", "6", "7", "8", "0") t = x((Int(1 + (Rnd() * 46))) - 1) End Select s = t t = "" End Function
[/vba]
Понадобилось недавно сделать генерацию уникальных ID. Ниже немного доработанное решение.
Возможности: Генерация случаных неповторяющихся комбинаций из символов латиницы и арабских цифр (опционально). Максимальное кол-во 40 символов (есть возможность добавить).
Может кому пригодится. Код
[vba]
Код
Sub GenerateRandomCombinations() Dim cl As New Collection Dim RandomCombination$, CountOfCombinations&, CountOfSymbols&, u&, SymNum As Integer
If CountOfSymbols ^ 9 < CountOfCombinations Then: MsgBox "Возможных уникальных комбинаций меньше чем требуется": Exit Sub:
On Error Resume Next Do RandomCombination = rndm(CountOfSymbols, SymNum) cl.Add RandomCombination, RandomCombination Loop While cl.Count <> CountOfCombinations
For u = 0 To cl.Count Cells(u + 1, 1).Formula = cl(u) Next
End Sub
Function rndm$(Optional i& = 14, Optional z As Integer = -1)
' i - целое число. Количество символов в комбинации. Максимум 40. Опционально. ' z - имеет 3 значения _ -1 в комбинации присутствуют цифры и буквы латиницы _ 1 в комбинации присутствуют только цифры _ 0 в комбинации присутствуют только буквы латиницы