Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Породить перестановку с ячейке, MS Excel 
:(
    Опции темы
Dr Smth
Дата 30.8.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.10.2004
Где: New Podrezkovo

Репутация: нет
Всего: 1



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

Код

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


Вопрос в следующем: как добиться того, чтобы все эти пять цифр были разными?
PM MAIL WWW   Вверх
ИгнатьевАлексей
Дата 30.8.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



Никак, имхо. Добро пожаловать в VBA!   smile 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Dr Smth
Дата 30.8.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.10.2004
Где: New Podrezkovo

Репутация: нет
Всего: 1



Я подозревал, но так как с VBA я практически не сталкивался, решил спросить – может кто подскажет...
PM MAIL WWW   Вверх
Dr Smth
Дата 30.8.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.10.2004
Где: New Podrezkovo

Репутация: нет
Всего: 1



Ну, в общем, получилось (пришлось время потратить). Вариант, конечно, не оптимальный, но работающий. Двух одинаковых перестановок не выдаёт, все числа в одном варианте разные. В примере всего 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

PM MAIL WWW   Вверх
Akina
Дата 30.8.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Код

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.