Вот макрос, он заполняет, но мне нужно чтобы числа были уникальными. Как видно из макроса текстбоксы от 1 до 5 заполняются цифрами от 0 до 50 и текстбоксы от 6 до 7 заполняются цифрами от 0 до 8, но мне надо сделать чтобы цифры не повторялись, помогите пожалуйста новичку
[vba]
Код
Private Sub CommandButton2_Click()
Dim x As Control Dim y For Each x In Me.Controls If TypeOf x Is MSForms.TextBox Then If x.Name = "TextBox1" Or x.Name = "TextBox2" Or x.Name = "TextBox3" Or x.Name = "TextBox4" Or x.Name = "TextBox5" Then y = (Int(0 + (Rnd() * 50))) x.Value = y End If If x.Name = "TextBox6" Or x.Name = "TextBox7" Then y = (Int(0 + (Rnd() * 8))) x.Value = y End If End If Next
End Sub
[/vba]
Вот макрос, он заполняет, но мне нужно чтобы числа были уникальными. Как видно из макроса текстбоксы от 1 до 5 заполняются цифрами от 0 до 50 и текстбоксы от 6 до 7 заполняются цифрами от 0 до 8, но мне надо сделать чтобы цифры не повторялись, помогите пожалуйста новичку
[vba]
Код
Private Sub CommandButton2_Click()
Dim x As Control Dim y For Each x In Me.Controls If TypeOf x Is MSForms.TextBox Then If x.Name = "TextBox1" Or x.Name = "TextBox2" Or x.Name = "TextBox3" Or x.Name = "TextBox4" Or x.Name = "TextBox5" Then y = (Int(0 + (Rnd() * 50))) x.Value = y End If If x.Name = "TextBox6" Or x.Name = "TextBox7" Then y = (Int(0 + (Rnd() * 8))) x.Value = y End If End If Next
Dim x As Control Dim y For Each x In Me.Controls If TypeOf x Is MSForms.TextBox Then If x.Name = "TextBox1" Or x.Name = "TextBox2" Or x.Name = "TextBox3" Or x.Name = "TextBox4" Or x.Name = "TextBox5" Then Dim cl As New Collection On Error Resume Next Do: i$ = Int(0 + (Rnd() * 50)) cl.Add i, i Loop While cl.Count < 5 For r = 1 To cl.Count x.Value = cl.Item(r) Next End If If x.Name = "TextBox6" Or x.Name = "TextBox7" Then y = (Int(0 + (Rnd() * 8))) x.Value = y End If End If Next
Dim x As Control Dim y For Each x In Me.Controls If TypeOf x Is MSForms.TextBox Then If x.Name = "TextBox1" Or x.Name = "TextBox2" Or x.Name = "TextBox3" Or x.Name = "TextBox4" Or x.Name = "TextBox5" Then Dim cl As New Collection On Error Resume Next Do: i$ = Int(0 + (Rnd() * 50)) cl.Add i, i Loop While cl.Count < 5 For r = 1 To cl.Count x.Value = cl.Item(r) Next End If If x.Name = "TextBox6" Or x.Name = "TextBox7" Then y = (Int(0 + (Rnd() * 8))) x.Value = y End If End If Next
End Sub
[/vba] так?? все равно значения повторяютсяbozanov
Правильный метод (для небольшого количества случайных) - это сгенерировать массив/коллекцию со всеми возможными вариантами (множество возможных), а затем - генерировать случайный индекс, запоминать выбранное значение, убирать это значение из множества - и снова генерировать индекс уже на уменьшенном множестве...
Правильный метод (для небольшого количества случайных) - это сгенерировать массив/коллекцию со всеми возможными вариантами (множество возможных), а затем - генерировать случайный индекс, запоминать выбранное значение, убирать это значение из множества - и снова генерировать индекс уже на уменьшенном множестве...AndreTM