Здравствуйте! Необходим код для перебора всех возможных вариантов - 15 событий по 3 исхода в каждом. Как такое сделать? Пытаюсь вникнуть в VBA, но пока что до такого мне самостоятельно еще далеко, знаю лишь несколько операторов...
Перебор всех возможных вариантов, VBA для этой задачи
16.10.2015 15:35:59
|
|
|
|
16.10.2015 15:38:29
Kara_100, здравия. Конкретизируйте.
|
|
|
|
16.10.2015 15:50:30
JayBhagavan, у нас есть 15 параметров и три возможных варианта их развития (негативный, нейтральный и позитивный). Хочется создать код, который будет выдавать общее кол-во возможных переборов (3^15) исходов эти параметров. Естественно на экран выводить их не нужно, потому что такое кол-во в лист не вместится, код нужен для дальнейшей селекции этих вариантов, первый шаг так сказать.
негатив нейтрал позитив пар 1 пар 2 пар 3 ... пар 15 |
|
|
|
16.10.2015 15:53:02
Kara_100, на Ваш вопрос только достаточно абстрактны ответ: события и исходы - в массивы, перебор с комбинацией вариантов - вложенными циклами
|
|
|
|
16.10.2015 15:58:28
Это?
Забыл, что нумерация с нуля. Исправил код.
Изменено:
|
|||
|
|
16.10.2015 16:16:28
JayBhagavan,возможно, а как посмотреть результат? По коду сложно понять... Логика вывода результата должна быть такой, прикрепляю пример с меньшим кол-вом переборов (для удобства). (Для 3^15 вывод результатов не потребуется, потребуется дальнейших их отсев опять же с помощью кода, но вот для начала отсева этот набор все же необходимо (по моей логике))
|
|
|
|
16.10.2015 16:30:28
Kara_100, для Вашего примера.
|
|||
|
|
16.10.2015 17:06:03
JayBhagavan,мне вот такое выдал, три варианта повторяющихся все время...
|
|
|
|
16.10.2015 17:16:23
Kara_100, какую последовательность Вы задали, так и заполнил массив. Вы же никакого конкретного алгоритма не предоставляли.
|
|
|
|
16.10.2015 17:21:59
JayBhagavan,ну как же... я же хотела как в примере, где представлен полный перебор вариантов... а макрос выдает только три варианта, которые повторяются... (прикрепляю скрин желаемого, это было в примере ранее, который я заполнила от руки)
|
|
|
|
16.10.2015 17:35:19
Kara_100, откуда мне знать по какому алгоритму у Вас заполнялась эта таблица?
--- Дошло. Код с ходу не реализую.
Изменено:
|
|
|
|
16.10.2015 17:39:38
JayBhagavan, да, я наверное плохо описала, прошу прощение.. Посижу, потыкаюсь, различные видео уже мало помогают на таком уровне... Спасибо большое за помощь, как никак, а продвигаюсь потихоньку! Может кто еще чем сможет помочь, подсказать..
|
|
|
|
16.10.2015 18:01:39
Формула:
=ИНДЕКС($B$9:$XFD$9;0;ОСТАТ(ЦЕЛОЕ((СТОЛБЕЦ()-СТОЛБЕЦ($A:$A)-1)/(СЧЁТЗ($B$9:$XFD$9)^(СЧЁТЗ($A$10:$A$1048576)+СТРОКА($3:$3)-СТРОКА())));СЧЁТЗ($B$9:$XFD$9))+1) --- Исправил формулу.
Изменено:
|
|
|
|
16.10.2015 18:13:02
JayBhagavan, ого!! ничего себе решение! Спасибо! Попробую с формулой поработать, вдруг и без VBA обойдусь! Надеюсь на это! Вы мне помогли очень!
|
|
|
|
16.10.2015 18:20:35
проверьте, вдруг оно...) у самого в глазах рябит от позитивных негативов уже..)
|
|
|
|
16.10.2015 18:26:59
yoozhik,да, выглядит правильно! Спасибо!! Но адаптировать этот код под 15 условий будет сложно (3^15 вместо 3^3)? (Пытаюсь разглядеть, что в нем можно поменять для этого).
P.S.: прошу прощение за "негативы", хотела для удобства обозначить как 1,2,3, но потом решила оставить условие задачи с такими параметрами |
|
|
|
16.10.2015 18:29:20
адаптировать да, сложновато будет..) если по предложенному алгоритму, то вместо трех переменных прописывать 15 придется и отслеживать когда какую изменить
|
|
|
|
16.10.2015 18:35:44
yoozhik,примерно поняла логику, что же, попробую "потыкаться"! Спасибо..!
|
|
|
|
16.10.2015 19:16:59
пример с алгоритмом попроще на 4 варианта. Добавлять проще, чем в первом примере, но 15 условий все равно добавить не выйдет - нет у экселя столько столбцов
|
|
|
|
16.10.2015 19:29:30
yoozhik,так сейчас буду разбираться, я очень благодарна за помощь! По поводу 15 условий у меня задача не вывести на экран эти 3^15 переборов, а поработать с ними отсеивая ограничениями ненужные и вывести уже отфильтрованные, поэтому я все же надеюсь задав кодом эти 3^15 вариантов потом кодом же их отсеять (то есть вывода на экран не будет на промежуточном этапе) и получить вполне вменяемую табличку из 300-400 вариантов... Задумка такая....
|
|
|
|
16.10.2015 19:33:45
как смог - упростил...) может кто попроще предложит чего...
|
|
|
|
16.10.2015 19:37:25
yoozhik,огромное спасибо! на вечер мне работка нашлась уж точно! очень помогли мне! А по поводу 15... даже совету какому то, подсказке буду очень благодарна..
|
|
|
|
16.10.2015 19:45:40
в последнем примере для увеличения количества вариантов надо изменить переменную, в которой количество условий, и вместо вывода в ячейки прописать запись в массив
|
|
|
|
16.10.2015 20:14:06
yoozhik,имеется ввиду переменная us? вторую часть фразы не совсем поняла... наверное мне было бы понятнее сравнить этот код для трех и для четырех условий, что и как меняется, тогда уже по логике пойму как расширить для других вариантов...
|
|
|
|
16.10.2015 20:18:28
для четырех уже готов. для пяти - us=5, x=5+3. (это последняя строка. +3 - первые три пустые). Должно вроде на любом количестве условий сработать. если места хватит.
Вместо вывода - в массив, если возможен массив на 15 строк и 3^14 столбцов |
|
|
|
16.10.2015 20:30:14
yoozhik,ура, для 5 работает!!! Теперь буду пробовать с массивом, сначала посмотрю в интернете материалы на эту тему! вы мне очень помогаете!
|
|
|
|
16.10.2015 22:23:11
нужна помощь
вышло следующее:
при количестве варианов 14 - Out of memory на 2003-м. Это без вариантов? или может как-то по другому можно массив записать? |
|||
|
|
16.10.2015 23:59:10
Или я не прав?
Изменено:
Неизлечимых болезней нет, есть неизлечимые люди.
|
||||
|
|
|||