Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Заполнить Textbox'ы уникальными рандом числами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнить Textbox'ы уникальными рандом числами (Макросы Sub)
Заполнить Textbox'ы уникальными рандом числами
bozanov Дата: Пятница, 29.11.2013, 18:47 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
Вот макрос, он заполняет, но мне нужно чтобы числа были уникальными.
Как видно из макроса текстбоксы от 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]


Сообщение отредактировал bozanov - Пятница, 29.11.2013, 18:49
 
Ответить
СообщениеВот макрос, он заполняет, но мне нужно чтобы числа были уникальными.
Как видно из макроса текстбоксы от 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]

Автор - bozanov
Дата добавления - 29.11.2013 в 18:47
SkyPro Дата: Пятница, 29.11.2013, 18:54 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Уникальные можно получить используя коллекцию:
[vba]
Код
Dim cl As New Collection
On Error Resume Next
Do: i$ = Int(0 + (Rnd() * 50))
      cl.Add i, i
Loop While cl.Count < 5
[/vba]

Ну и считать потом из неё вот так:
[vba]
Код
For r = 1 To cl.Count
     Debug.Print cl.Item(r)
Next
[/vba]
Вместо дебаг принт поставьте добавление в текстбокс.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 29.11.2013, 18:55
 
Ответить
СообщениеУникальные можно получить используя коллекцию:
[vba]
Код
Dim cl As New Collection
On Error Resume Next
Do: i$ = Int(0 + (Rnd() * 50))
      cl.Add i, i
Loop While cl.Count < 5
[/vba]

Ну и считать потом из неё вот так:
[vba]
Код
For r = 1 To cl.Count
     Debug.Print cl.Item(r)
Next
[/vba]
Вместо дебаг принт поставьте добавление в текстбокс.

Автор - SkyPro
Дата добавления - 29.11.2013 в 18:54
bozanov Дата: Пятница, 29.11.2013, 19:47 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel для Mac
For r = 1 To cl.Count
    Debug.Print cl.Item®
Next


[vba]
Код
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]
так?? все равно значения повторяются
 
Ответить
Сообщение
For r = 1 To cl.Count
    Debug.Print cl.Item®
Next


[vba]
Код
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
Дата добавления - 29.11.2013 в 19:47
AndreTM Дата: Пятница, 29.11.2013, 23:22 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Правильный метод (для небольшого количества случайных) - это сгенерировать массив/коллекцию со всеми возможными вариантами (множество возможных), а затем - генерировать случайный индекс, запоминать выбранное значение, убирать это значение из множества - и снова генерировать индекс уже на уменьшенном множестве...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеПравильный метод (для небольшого количества случайных) - это сгенерировать массив/коллекцию со всеми возможными вариантами (множество возможных), а затем - генерировать случайный индекс, запоминать выбранное значение, убирать это значение из множества - и снова генерировать индекс уже на уменьшенном множестве...

Автор - AndreTM
Дата добавления - 29.11.2013 в 23:22
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнить Textbox'ы уникальными рандом числами (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!