Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
28.05.2013, 10:53
|
|||
---|---|---|---|
|
|||
Excel VBA Случайные числа без повторений |
|||
#18+
Здравствуйте! Как при выборке случайных чисел, избежать повторений.Кто сталкивался,помогите пожалуйста.Заранее спасибо. Вот код Sub Generate() Worksheets("0").Activate Cells.Select Selection.ClearContents Range("A1").Select Dim test_count As Integer Dim y As Integer Dim quest_count_I As Integer Dim quest_count_II As Integer Dim max_quest_II, max_quest As Integer Dim min_quest_II As Integer Dim list As String Dim m() As Integer Dim WRD Set WRD = CreateObject("Word.Application") WRD.Visible = True WRD.Documents.Open "D:\test.doc" ' !!!! test_count = 3 ' quest_count_I = 5 ' quest_count_II = 8 ' min_quest_II = 37 max_quest_II = 43 ' max_quest = 36 sea = 2 ReDim m(quest_count_I) Randomize For i = 1 To test_count Step 1 WRD.Selection.Font.Size = 14 WRD.Selection.Font.Bold = True WRD.Selection.TypeText Text:="Ýêçàìåíàöèîííûé ëèñò " + CStr(i) WRD.Selection.Font.Bold = wdToggle WRD.Selection.TypeParagraph WRD.Selection.Font.Size = 12 Worksheets("0").Cells(sea, 1).Value = "Ýêçàìåíàöèîííûé ëèñò " + CStr(i) sea = sea + 1 For j = 1 To quest_count_I Step 1 Worksheets("Îñíîâíîé áëîê").Activate ActiveCell.SpecialCells(xlLastCell).Select MaxString = ActiveCell.Row num = Int(Rnd * max_quest) + 1 tmp = 0 For Z = 1 To MaxString Step 1 y = m(Z): m(Z) = m(num): m(num) = y If (Int(Cells(Z, 2).Value) = num) Then ' MsgBox (Cells(Z, 3).Value) tmp = Z Exit For End If Next Z If tmp = 0 Then str1 = "Íîìåð âîïðîñà íå íàéäåí: " + CStr(num) MsgBox (str1) End If Next j sea = sea + 1 Next i End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
|
28.05.2013, 10:56
|
|||
---|---|---|---|
|
|||
Excel VBA Случайные числа без повторений |
|||
#18+
Учимся использовать тэги оформления кода - FAQ Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.06.2013, 15:15
|
|||
---|---|---|---|
|
|||
Excel VBA Случайные числа без повторений |
|||
#18+
Какой то "индусский код". Вы бы хоть задачу сформулировали. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.06.2013, 16:43
|
|||
---|---|---|---|
Excel VBA Случайные числа без повторений |
|||
#18+
DON_DON, На скорую руку (не самый эффективный метод), не вдаваясь в детали и тем более в ваш код, можно так. А вообще в Интернете полно готовых вариантов. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.06.2013, 18:31
|
|||
---|---|---|---|
Excel VBA Случайные числа без повторений |
|||
#18+
Если надо именно уникальные рандомы - их лучше накапливать в коллекции, где ключи элементов - строковые представления рандомов, а значения - числовые. В цикле DO-LOOP UNTIL Collection.Items.Count = требуемое_количество. Дубли отсекутся сами - только не забыть ON ERROR RESUME NEXT. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=61&mobile=1&tid=2174758]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 451ms |
0 / 0 |