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

Вход

Регистрация

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

 

= Мир MS Excel/Заполнение диапазона случайными числами по условиям - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнение диапазона случайными числами по условиям
Заполнение диапазона случайными числами по условиям
SkyPro Дата: Среда, 03.07.2013, 11:28 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Добрый день, уважаемые.
В очередной раз требуется ваша помощь.
Есть диапазон F9:N20 , который необходимо заполнить случайными числами от 0 до 2.
Условия заполнения:
Сумма чисел в F9:F20 должна равняться значению F6, сумма чисел F9:N9 должна равняться значению E9
Сумма чисел в G9:G20 должна равняться значению G6, сумма чисел F10:N10 должна равняться значению E10
и так далее..

Пробовал решить поочередным заполнением строк и столбцов (уменьшая диапазон), но в итоге понял, что такое решение не "прокатит", макрос зацикливается.
Задача чем-то похожа на судоку. Нашел несколько вариантов решения судоку на ВБА, но, если быть откровенным, открыв код я не смог даже приблизительно понять, как он работает. Соответственно не могу применить для решения своей задачи.

Буду благодарен за любую помощь или подсказку.

В вложении сама таблица + мой кривой код, который зацикливается (потому как там есть Loop While).
К сообщению приложен файл: wk.xlsm (21.6 Kb)


skypro1111@gmail.com
 
Ответить
СообщениеДобрый день, уважаемые.
В очередной раз требуется ваша помощь.
Есть диапазон F9:N20 , который необходимо заполнить случайными числами от 0 до 2.
Условия заполнения:
Сумма чисел в F9:F20 должна равняться значению F6, сумма чисел F9:N9 должна равняться значению E9
Сумма чисел в G9:G20 должна равняться значению G6, сумма чисел F10:N10 должна равняться значению E10
и так далее..

Пробовал решить поочередным заполнением строк и столбцов (уменьшая диапазон), но в итоге понял, что такое решение не "прокатит", макрос зацикливается.
Задача чем-то похожа на судоку. Нашел несколько вариантов решения судоку на ВБА, но, если быть откровенным, открыв код я не смог даже приблизительно понять, как он работает. Соответственно не могу применить для решения своей задачи.

Буду благодарен за любую помощь или подсказку.

В вложении сама таблица + мой кривой код, который зацикливается (потому как там есть Loop While).

Автор - SkyPro
Дата добавления - 03.07.2013 в 11:28
Pelena Дата: Среда, 03.07.2013, 11:42 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19196
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
А без макросов не пойдёт?
Поиск решения, например
К сообщению приложен файл: 0581802.xlsm (23.0 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеА без макросов не пойдёт?
Поиск решения, например

Автор - Pelena
Дата добавления - 03.07.2013 в 11:42
SkyPro Дата: Среда, 03.07.2013, 11:55 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Спасибо огромнейшее!
Я даже не подумал об этом..
Вариант подходит, сейчас посмотрю можно ли организовать доп условия.


skypro1111@gmail.com
 
Ответить
СообщениеСпасибо огромнейшее!
Я даже не подумал об этом..
Вариант подходит, сейчас посмотрю можно ли организовать доп условия.

Автор - SkyPro
Дата добавления - 03.07.2013 в 11:55
SkyPro Дата: Среда, 03.07.2013, 13:38 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
К сожалению есть дополнительные условия, которые Сольвер не принимает и колчичество ячеек условий больше 200 (файл примера "обрезан").
Кто может помочь в решении задачи посредством ВБА?


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 03.07.2013, 13:40
 
Ответить
СообщениеК сожалению есть дополнительные условия, которые Сольвер не принимает и колчичество ячеек условий больше 200 (файл примера "обрезан").
Кто может помочь в решении задачи посредством ВБА?

Автор - SkyPro
Дата добавления - 03.07.2013 в 13:38
SkyPro Дата: Среда, 03.07.2013, 14:22 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Есть диапазон F9:N82 , который необходимо заполнить случайными числами от 0 до 2.
Условия заполнения:
Сумма чисел в F9:F82 должна равняться значению F6, сумма чисел F9:N9 должна равняться значению E9
Сумма чисел в G9:G82 должна равняться значению G6, сумма чисел F10:N10 должна равняться значению E10
Столбцы разделены на группы KK и SV&CO. На пересечении столбцов с значением КК (диапазон F4:N4) и строк с значением SV&CO (D9:D82) проставляются 0.

третий день бьюсь над этим =\
К сообщению приложен файл: 8975366.xlsm (26.5 Kb)


skypro1111@gmail.com
 
Ответить
СообщениеЕсть диапазон F9:N82 , который необходимо заполнить случайными числами от 0 до 2.
Условия заполнения:
Сумма чисел в F9:F82 должна равняться значению F6, сумма чисел F9:N9 должна равняться значению E9
Сумма чисел в G9:G82 должна равняться значению G6, сумма чисел F10:N10 должна равняться значению E10
Столбцы разделены на группы KK и SV&CO. На пересечении столбцов с значением КК (диапазон F4:N4) и строк с значением SV&CO (D9:D82) проставляются 0.

третий день бьюсь над этим =\

Автор - SkyPro
Дата добавления - 03.07.2013 в 14:22
AndreTM Дата: Среда, 03.07.2013, 15:19 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Цитата (SkyPro)
На пересечении столбцов с значением КК (диапазон F4:N4) и строк с значением SV&CO (D9:D82) проставляются 0
А наоборот (на пересечении строк KK и столбцов SV&CO) - тоже 0?
Если так - то сортируем столбцы и строки по группам - и тогда каждая группа решается через ПоискРешения.
Даже если только одно условие (строки KK и столбцы SV&CO) - то достаточно для ПоискРешения прописывать не просто СУММ(), а СУММЕСЛИ(), где условие как раз и будет проверять необходимость суммирования ячейки (т.е. мы не суммируем те самые строкаKK-столбецSV, где и так ноль, не влияющий на сумму).


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 03.07.2013, 15:28
 
Ответить
Сообщение
Цитата (SkyPro)
На пересечении столбцов с значением КК (диапазон F4:N4) и строк с значением SV&CO (D9:D82) проставляются 0
А наоборот (на пересечении строк KK и столбцов SV&CO) - тоже 0?
Если так - то сортируем столбцы и строки по группам - и тогда каждая группа решается через ПоискРешения.
Даже если только одно условие (строки KK и столбцы SV&CO) - то достаточно для ПоискРешения прописывать не просто СУММ(), а СУММЕСЛИ(), где условие как раз и будет проверять необходимость суммирования ячейки (т.е. мы не суммируем те самые строкаKK-столбецSV, где и так ноль, не влияющий на сумму).

Автор - AndreTM
Дата добавления - 03.07.2013 в 15:19
SkyPro Дата: Среда, 03.07.2013, 15:23 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Цитата (AndreTM)
А наоборот (на пересечении строк KK и столбцов SV&CO) - тоже 0?

Нет, только на пересечении столбцов KK и строк SV&CO 100% проставляется 0.
В других случаях - рандомное значение от 0 до 2.

Вариант с коллекцией на первые три столбца =\


Поиск решения по группам с сортировкой дает не тот результат, что необходим:
К примеру три строки из группы заполнены просто нулями, а остальные проставлены единицы. А необходимо случайное распределение включающее в себя и двойки.
+ ограничение на кол-во ячеек в "поиск решения"..
+ нужно все организовать "нажатием одной кнопки" =\


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 03.07.2013, 16:45
 
Ответить
Сообщение
Цитата (AndreTM)
А наоборот (на пересечении строк KK и столбцов SV&CO) - тоже 0?

Нет, только на пересечении столбцов KK и строк SV&CO 100% проставляется 0.
В других случаях - рандомное значение от 0 до 2.

Вариант с коллекцией на первые три столбца =\


Поиск решения по группам с сортировкой дает не тот результат, что необходим:
К примеру три строки из группы заполнены просто нулями, а остальные проставлены единицы. А необходимо случайное распределение включающее в себя и двойки.
+ ограничение на кол-во ячеек в "поиск решения"..
+ нужно все организовать "нажатием одной кнопки" =\

Автор - SkyPro
Дата добавления - 03.07.2013 в 15:23
nilem Дата: Среда, 03.07.2013, 18:38 | Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
SkyPro,
нужно получить одно решение или таких решений нужно несколько?
Если одно, то вот. "ИСТИНА" по строкам получил с пом-ю ertert (см. Module3), а в столбцах вручную переместил несколько цифр (если хорошо подумать, то, наверное, столбцы тоже можно автоматизировать).
Скорее всего, нужен какой-нибудь кудрявый алгоритм (и наверняка он есть!); случайные числа - это как-то зыбко.
К сообщению приложен файл: _8975366.xlsm (26.3 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеSkyPro,
нужно получить одно решение или таких решений нужно несколько?
Если одно, то вот. "ИСТИНА" по строкам получил с пом-ю ertert (см. Module3), а в столбцах вручную переместил несколько цифр (если хорошо подумать, то, наверное, столбцы тоже можно автоматизировать).
Скорее всего, нужен какой-нибудь кудрявый алгоритм (и наверняка он есть!); случайные числа - это как-то зыбко.

Автор - nilem
Дата добавления - 03.07.2013 в 18:38
SkyPro Дата: Среда, 03.07.2013, 18:52 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Nilem, спасибо огромное за помощь.
Нужно получить решение, удовлетворяющее все условия.
Данные будут меняться (не единоразовое решение).

ЗЫ:
Могу я попросить вас как-нибудь откомментировать код? А то для меня он не совсем понятен.. =\
Может с вашей помощью разберусь и "додумаю" решение.


skypro1111@gmail.com
 
Ответить
СообщениеNilem, спасибо огромное за помощь.
Нужно получить решение, удовлетворяющее все условия.
Данные будут меняться (не единоразовое решение).

ЗЫ:
Могу я попросить вас как-нибудь откомментировать код? А то для меня он не совсем понятен.. =\
Может с вашей помощью разберусь и "додумаю" решение.

Автор - SkyPro
Дата добавления - 03.07.2013 в 18:52
nilem Дата: Среда, 03.07.2013, 19:24 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Попробую...
Сначала определяем массивы
v - это массив сумм по строкам
prV и prG - массивы для проверки "SV&CO" и "KK"
Определяем массив x&(1 To 74, 1 To 9) ("&" это "As Long")
и заполняем его в цикле: если выполняется prV(i) = "SV&CO" And prG(j) = "KK", то пишем 0, если нет, то 0, 1 или 2
заворачиваем это в Do Loop , пока сумма не равна сумме из массива v - While sm <> v(i)
И все smile


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеПопробую...
Сначала определяем массивы
v - это массив сумм по строкам
prV и prG - массивы для проверки "SV&CO" и "KK"
Определяем массив x&(1 To 74, 1 To 9) ("&" это "As Long")
и заполняем его в цикле: если выполняется prV(i) = "SV&CO" And prG(j) = "KK", то пишем 0, если нет, то 0, 1 или 2
заворачиваем это в Do Loop , пока сумма не равна сумме из массива v - While sm <> v(i)
И все smile

Автор - nilem
Дата добавления - 03.07.2013 в 19:24
SkyPro Дата: Пятница, 05.07.2013, 09:55 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Спасибо за разьяснение и за помощь.

ЗЫ:
Может попытаться прикрутить постепенное уменьшение диапазона столбцов при выполнении условий + соответствующее уменьшение суммы условий? Можно ли для таких целей использовать ReDim?


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 05.07.2013, 09:58
 
Ответить
СообщениеСпасибо за разьяснение и за помощь.

ЗЫ:
Может попытаться прикрутить постепенное уменьшение диапазона столбцов при выполнении условий + соответствующее уменьшение суммы условий? Можно ли для таких целей использовать ReDim?

Автор - SkyPro
Дата добавления - 05.07.2013 в 09:55
nilem Дата: Пятница, 05.07.2013, 10:39 | Сообщение № 12
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
SkyPro,
вам это реально надо? Можете объяснить конечную цель? Возможно, есть другие рещения/подходы


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеSkyPro,
вам это реально надо? Можете объяснить конечную цель? Возможно, есть другие рещения/подходы

Автор - nilem
Дата добавления - 05.07.2013 в 10:39
SkyPro Дата: Пятница, 05.07.2013, 11:05 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Мне это реально надо )
И конечная цель именно распределять эти 0, 1 и 2 в диапазоне по условиям. Может тут и есть другие варианты рещения, но нужна кнопка "сделать как надо" =\


skypro1111@gmail.com
 
Ответить
СообщениеМне это реально надо )
И конечная цель именно распределять эти 0, 1 и 2 в диапазоне по условиям. Может тут и есть другие варианты рещения, но нужна кнопка "сделать как надо" =\

Автор - SkyPro
Дата добавления - 05.07.2013 в 11:05
nilem Дата: Пятница, 05.07.2013, 11:26 | Сообщение № 14
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
А можете показать еще неск. примеров с разными суммами?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеА можете показать еще неск. примеров с разными суммами?

Автор - nilem
Дата добавления - 05.07.2013 в 11:26
SkyPro Дата: Пятница, 05.07.2013, 12:07 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
как-то так.
Главное сумма F6:N6 = сумме E9:E82
К сообщению приложен файл: WWW.xlsm (45.8 Kb)


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 05.07.2013, 12:16
 
Ответить
Сообщениекак-то так.
Главное сумма F6:N6 = сумме E9:E82

Автор - SkyPro
Дата добавления - 05.07.2013 в 12:07
nilem Дата: Пятница, 05.07.2013, 12:55 | Сообщение № 16
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Вот смотрите, что получилось. Вариант сырой, допилите сами.
сначала нажимаем кнопку "Строки", чтобы поучить ИСТИНА по строкам, потом "Столбцы", чтобы получить столбцы. Там, где "g" (на пересечении "SV&CO" и "KK") - это чтобы отличить от цифр, можно просто Найти-Заменить.
Код корявенький, особенно rtyrty (ertert почему-то всегда лучше получается :)), на случайных числах, но вроде работает.

только сейчас обратил внимание: иногда -1 появляется...
но если несколько раз перещелкать кнопки Строки-Столбцы, то можно получить рез-т бех отрицательных значений. Проверял с такой формулой:
Код
=СЧЁТЕСЛИ(F9:N82;"<0")

видимо обе процедуры нужно объединить и поместить в еще один цикл.
К сообщению приложен файл: _8975366-2.xlsm (28.8 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Пятница, 05.07.2013, 13:16
 
Ответить
СообщениеВот смотрите, что получилось. Вариант сырой, допилите сами.
сначала нажимаем кнопку "Строки", чтобы поучить ИСТИНА по строкам, потом "Столбцы", чтобы получить столбцы. Там, где "g" (на пересечении "SV&CO" и "KK") - это чтобы отличить от цифр, можно просто Найти-Заменить.
Код корявенький, особенно rtyrty (ertert почему-то всегда лучше получается :)), на случайных числах, но вроде работает.

только сейчас обратил внимание: иногда -1 появляется...
но если несколько раз перещелкать кнопки Строки-Столбцы, то можно получить рез-т бех отрицательных значений. Проверял с такой формулой:
Код
=СЧЁТЕСЛИ(F9:N82;"<0")

видимо обе процедуры нужно объединить и поместить в еще один цикл.

Автор - nilem
Дата добавления - 05.07.2013 в 12:55
nilem Дата: Пятница, 05.07.2013, 13:27 | Сообщение № 17
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот так можно попробовать, если в F2 у нас формула =СЧЁТЕСЛИ(F9:N82;"<0")
[vba]
Код
Sub ttt()
Do
     Call ertert
     Call rtyrty
Loop While [f2] > 0
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевот так можно попробовать, если в F2 у нас формула =СЧЁТЕСЛИ(F9:N82;"<0")
[vba]
Код
Sub ttt()
Do
     Call ertert
     Call rtyrty
Loop While [f2] > 0
End Sub
[/vba]

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

2010
Спасибо вам огромное!
Буду разбиратсья.


skypro1111@gmail.com
 
Ответить
СообщениеСпасибо вам огромное!
Буду разбиратсья.

Автор - SkyPro
Дата добавления - 05.07.2013 в 13:33
CharoChes Дата: Пятница, 19.02.2016, 22:15 | Сообщение № 19
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Можете помочь с подобным ?
 
Ответить
СообщениеМожете помочь с подобным ?

Автор - CharoChes
Дата добавления - 19.02.2016 в 22:15
CharoChes Дата: Пятница, 19.02.2016, 22:17 | Сообщение № 20
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
файл в приложении
[moder]У Вас уже есть своя тема. А пост здесь является нарушением Правил форума.
К сообщению приложен файл: 7034419.xls (28.0 Kb)


Сообщение отредактировал _Boroda_ - Пятница, 19.02.2016, 22:27
 
Ответить
Сообщениефайл в приложении
[moder]У Вас уже есть своя тема. А пост здесь является нарушением Правил форума.

Автор - CharoChes
Дата добавления - 19.02.2016 в 22:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Заполнение диапазона случайными числами по условиям
  • Страница 1 из 1
  • 1
Поиск:

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