Страницы: 1
RSS
[ Закрыто ] Реализация итеративного исчисления массива формул с контролем решения
 
Добрый день.

...

По теме.
Есть массив из 10 000 строк.
В каком-то столбце есть коэффициенты для расчётов для первой итерации Ню=1 для всех строк.
Далее по ню=1 считается 3 столбца итогом расчётов становится тоже ню=разное1.

Далее по ню=разное считаются по тем же формулам то же самое ню=разное2.

Получаются итерации для каждой строки, но все строки взаимозависимы.
Для сходимости нужно примерно до 100 итераций.
Можно реализовать и без макросов, конечно, просто продолжая итерации направо в новых ячейках, но для 10 000 строк и 100 итераций по 5 вычислений это будет гибель компьютера.


Что нужно от VB.

Думаю это проще реализовать так.
В первом столбце ню1=1. Справа считается первая итерация формул получается ню2=разное1. Далее считается вторая итерация с ню3=разное2.
Далее VB должен скопировать столбец значений ню3 на место ню2 (заменяя формулы идущие из предыдущей итерации слева).
При этом эта замена должна происходить до расчёта новой итерации. То есть обязательно должен поменяться весь столбец ню2, а уже потом начинаться следующие вычисления.
Далее следует итерация вычислений и повторение итераций N раз до тех пор пока результат не сойдётся с нужной точностью Х%.
То есть что-то такое для каждой строки:
ню1=1 ...  формулы-формулы  ...   ню2="результат формул"  ...  формулы-формулы ... ню3="результат формул"  (далее копируем значения ню3 -->ню2 заданное количество раз возможно вручную глазами проверяя критерий сходимости)

На конкурирующем форуме екселя нашёл пример макроса для копирования значений из одной ячейки в другую (https://programmersforum.ru/showthread.php?t=151534)
Код:
Sub Макрос2()
   [a1].Copy
   [b1].PasteSpecial Paste:=xlPasteValues
   Application.CutCopyMode = False
End Sub

Я могу порыться и найти как повесить на кнопку эту операцию. Я могу порыться и найти или догадаться как копировать массивы ячеек.

При этом остальное я не понимаю и не знаю как реализовать.
То есть на момент копирования значений Ексель не должен вычислять формулы (чтобы скопировались верные Ню3) или же само копирование должно происходить как-то за один раз из какого-то буфера обмена. Вообще не представляю что говорю, но как-то так.
Также не знаю как реализовать ячейку со счётчиком.
Также после всех вычислений, как-то придётся воротать обратно формулы в значения ню2 для новых будущих расчётов.

Пожалуйста, помогите.

Пустой файл екселя с исходными данными для итераций сейчас выложу. Но файл не готов , там нет формул, то есть не будет сходиться и там нет решения...


Поиск решения.

Согласно https://vremya-ne-zhdet.ru/vba-excel/tsikly/
https://vremya-ne-zhdet.ru/vba-excel/tsikl-for-next/

Существует цикл For-Next
For счетчик = начало To конец [ Step шаг ]
   [ операторы ]
   [ Exit For ]
   [ операторы ]
Next [ счетчик ]
Изменено: Tyhig - 24.05.2020 22:59:18
 
Tyhig, OFF  норме ТЗ)
Не бойтесь совершенства. Вам его не достичь.
 
Tyhig,
в вашем рассказе не хватает 2-х фраз:
Цитата
Tyhig написал:
Не умею и ненавижу скрипты, макросы, VB и т.п.
и лично Била Гейтса (1)
Цитата
Tyhig написал:
Пожалуйста, помогите.
и спасибо всем, кто смог дочитать до этой строки! (2)

предлагаю вам уйти от эмоций и сосредоточится на постановке задачи (для местной публики)
без всех этих напряженно-деформационных моделей, не нужно морочить людям голову предельным сопротивлением бетона сжатию, предельным сопротивлением арматуры растяжению, относительной высотой сжатой зоны бетона, не говоря уже об эффективной ширине полки для таврового поперечного сечения и прочими характеристиками (условностями) расчетной схемы.
напишите простыми словами, чем вам может помочь Excel
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Во первых до конца не осознал алгоритм, который мне надо реализовать. Нужна помощь с алгоритмом. Уверен, что то, что привёл выше, несовершенно.

Во вторых никогда не сталкивался с VB в EXCEL и не знаю что делать. Не знаю как реализовать этот алгоритм средствами VB. Нужна любая помощь и тут.

Конкретную задачу вроде бы подробно описал выше. Что нужно ещё ?
Изменено: Tyhig - 24.05.2020 22:05:49
 
Tyhig,  Уберите животрепещущую прелюдию из первого поста про гением и про нелюбовь к VB, я вот тоже не люблю VB и это не мешает. А вот с конкретной задачей - прям скажем туго. Или описывайте более точно или ждите специалиста который в теме вопроса.
По вопросам из тем форума, личку не читаю.
 
Не понимаю что ещё нужно.
Приложил файл ексель, в котором по сути нарисован алгоритм как его вижу и операции что надо сделать.
Как ещё подробней описать ?

Ну хорошо.
Как одновременно (во время замены не должны производится вычисления) заменить формулы или значения в диапазоне ячеек (1 столбец 10 000 строк) на значения из другого аналогичного диапазона N раз (для реализации итеративного вычисления методом подбора) ?
Может быть так коротко и понятно ?
 
теперь вся ясно и понятно...
осталось запастись терпением и дождаться пока косяком повалят ответы на ваш четко сформулированный вопрос
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
пока косяком повалят
пока c косяком повалят  ????  :D
По вопросам из тем форума, личку не читаю.
 
Полагаю, хорошо будет на примере одной строчки показать, что нужно. Какое решение, Вы, Уважаемый Tyhig, сейчас получаете менее эффективно, без применения макросов.  
 
Ну хорошо.

Посредством записи макроса записал простое нужное действие.
Смог повесить макрос на кнопку.
Недостаток - приходится нажимать кнопку 100 раз. Ну и понадобится прикрутить к делу ещё пару операций в будущем.
Сейчас пытаюсь разобраться с синтаксисом VBA Excel для реализации цикла For...Next со счётчиком. Пока ексель ругается и не даётся.

То, что работает и надо.
Код:
Sub Макрос1()
'
' Макрос1 Макрос
' Описание макроса
'

'
   Range("Y21:Z30").Select
   Selection.Copy
   Range("T21:U30").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
End Sub



Мои попытки использовать цикла For...Next со счётчиком.
Код:
Sub Макрос1()
'
' Макрос1 Макрос
' 1
'

'Цикл

For N = 1 To "W11"

' Копирует диапазон ячеек

   Range("Y21:Z30").Select
   Selection.Copy
   Range("T21:U30").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False

Next N

End Sub

Может быть по синтаксису подскажете ?
 
Создайте тмы с названием, по которому будет понятна конкретная задача. Опишите задачу в первом сообщении. Приложите файл-пример.
Код в сообщении следует оформлять с помощью кнопки <...>
Страницы: 1
Наверх