Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Породить перестановку с ячейке


Автор: Dr Smth 30.8.2006, 17:10
Задача такая: нужно в 1 ячейке породить перестановку из 5 чисел, причём каждое, чилсо меняется в пределах 0...9. Я сделал это так:

Код

=СЦЕПИТЬ(ЦЕЛОЕ(9,9*СЛЧИС()); ЦЕЛОЕ(9,9*СЛЧИС()); ЦЕЛОЕ(9,9*СЛЧИС()); ЦЕЛОЕ(9,9*СЛЧИС()); ЦЕЛОЕ(9,9*СЛЧИС()))


Вопрос в следующем: как добиться того, чтобы все эти пять цифр были разными?

Автор: ИгнатьевАлексей 30.8.2006, 17:59
Никак, имхо. Добро пожаловать в VBA!   smile 

Автор: Dr Smth 30.8.2006, 18:50
Я подозревал, но так как с VBA я практически не сталкивался, решил спросить – может кто подскажет...

Автор: Dr Smth 30.8.2006, 21:13
Ну, в общем, получилось (пришлось время потратить). Вариант, конечно, не оптимальный, но работающий. Двух одинаковых перестановок не выдаёт, все числа в одном варианте разные. В примере всего 30 вариантов:

Код

Sub Макрос1()
Dim vr(30) As String
    For i = 1 To 30
here:  vr(i) = ""
       For j = 1 To 5
       Randomize
        Let a = 0 + Int(9.9 * Rnd())
        If j > 1 Then
         Let s = 0
            For k = 1 To j - 1
              If Val(Mid(vr(i), k, 1)) = a Then
              s = s + 1
              End If
            Next k
         If s <> 0 Then GoTo here
         End If
         vr(i) = vr(i) & a
        Next j

    If i > 1 Then
         Let s = 0
            For l = 1 To i - 1
              If vr(i) = vr(l) Then
              s = s + 1
              End If
            Next l
         If s <> 0 Then GoTo here
    End If
    Range("A" & i).Select
    ActiveCell.NumberFormat = "@"
    ActiveCell.FormulaR1C1 = vr(i)
    Next i
End Sub

Автор: Akina 30.8.2006, 22:55
Код

Public Function FiveRandoms() As String
Dim x(0 To 9) As Integer
Dim i As Integer
For i = 0 To 9
   x(i) = i
Next
Randomize Timer
FiveRandoms = ""
For i = 1 To 5
   n = Random(0, 10 - i)
   FiveRandoms = FiveRandoms & Str(x(n))
   x(n) = 10 - i
Next i
End Function
Функцию Random берем по адресу http://vingrad.ru/VB-VB-002236

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)