![]() |
Перевести логическую формулу в макрос, Excel
Ребят помогите пожалуйста вот эту формулу представить в виде скрипта:
=ЕСЛИ(E3="";B3-B3;ЕСЛИ(B3>E3;B3-E3;0)) Пробовал так: Код:
Range("G3").Select Буду премного благодарен. :) |
Цитата:
Код:
Range("G3").FormulaLocal = "=Если(E3="""";B3-B3;Если(B3>E3;B3-E3;0))" |
Цитата:
|
Цитата:
Спасибо большое. Цитата:
Цитата:
|
Ребят, возможно наглею, но хотя бы кратко подскажите плз как организовать цикл, т.е.
Вот выполнилась операция (не просто 1+1, а начиная от вычисления формул, копирования и вставки в ячейки и до очистки всех не нужных ячеек), а теперь нужно сделать тоже самое еще раз и так столько раз пока значение в некоторой ячейке не будет меньше или равно, ну скажем 1000. Тогда этот цикл прекращается. Попробовал первое что пришло в голову, но так не фурычит: Код:
Dim sum As Integer Do While sum >= 1000 и до loop Выполнялись пока сумма в одной ячейке не достигнет значения менее 1000 |
Цитата:
Цитата:
|
Вложений: 1
Цитата:
Только там тип файла *.xlsm Структуру файла оставил, названия некоторые изменил. Смысл задачи такой. Есть статьи расходов, для которых определена ставка с 1000 р. т.е. это минимальная единица распределения - сколько с этой суммы будет уходить в каждую статью. Для некоторых статей есть лимит, т.е. если сумма превысила его, то излишек уходит т.с. в "общий котел". И если сумма в этом "общем котле" опять превысит 1000, например 1230, то 1000 опять раскидывается по статьям, а 230 остаются не тронутыми, соответственно, если 8325 то раскидывается 1000*8 (т.е. операция 8 раз выполняется), 325 нетронутыми. Один раз вся вот эта транзакция выполняется успешно, но если нужно 8 раз выполнить, то придется вручную тыкать кнопку 8 раз. А хотелось бы, что бы программа делала это сама до момента пока сумма в ячейке "общий котел" - "B2" не будет меньше 1000. При этом самый первый модуль в цикл не входит. Вот. |
Цитата:
|
Вопрос решен:
Код:
While Cells(2, 2) >= 1000 |
Цитата:
Но у меня для Вас всё же кое-что есть. Я сделал некоторые упрощения в приведённом Вами коде из выложенного файла: Код:
Sub CopyValues() Код:
' * операции с выделением: Код:
Range("…").Select Код:
Range("…").… Код:
Selection.Copy Код:
Range("…").Value = Range("…").Value Код:
Range("…").Select Код:
Range("…").FormulaLocal = "=…" Код:
Range("…, …, …").ClearContents |
Iska
Спасибо за проделанную работу. Ща протестирую. ))) |
Проверил. Работает.
Но появилась идея еще немного оптимизировать и вот ту, пожалуй будет посложнее. (( Буду благодарен если кто подскажет. А мысль такая: Операции которые фактически выполняются здесь: Код:
Range("G3:G26").FormulaLocal = "=($I$2*C3)+B3" Но для как видно пришлось для выполнения сначала одной формулы: Код:
"=($I$2*C3)+B3" Код:
Если(E3="""";0;Если(B3>E3;B3-E3;0))" А вот если бы помещать результата выполнения этой операции в переменную. Помещать в том же виде, как он хранится в этом диапазоне. Что бы с ним можно было производить такие же операции: Range("B3:B26").Value = Range("I3").FormulaLocal = "=СУММ( Вот это я честно говоря даже не представляю как сделать. :( |
Цель - как можно больше операций переместить в код, а на листе Excel использовать как можно меньше дополнительных ячеек.
Покамест сконцентрировал свое внимание на первой позиции: С Листа перенес в макрос формулу: В ячейке I2 =ЕСЛИ($B$2>=100; ОКРУГЛВНИЗ($B$2/100; 0);0) Код:
Dim zn As Integer Дальше эту переменную нужно использовать в следующей операции, вместо: $I$2 Код:
Range("G3:G26").FormulaLocal = "=($I$2*C3)+B3" Код:
Range("G3:G26").FormulaLocal = "=(zn*C3)+B3" Код:
Range("G3:G26").Value = zn * Range("C3").Value + Range("B3").Value А нужно что бы для диапазона ячеек выполнялась формула, которую я пытаюсь перевести в VBA код. Как это сделать - не знаю. Помогите пожалуйста. :( |
Можно конечно сделать тупо вот так:
Код:
Range("G3").Value = zn * Range("C3").Value + Range("B3").Value |
Никто не может подсказать? :(
|
Фактически можно сделать вывод, что цель это эмулировать некую группу ячеек (столбец или строку) в языке программирования Basic.
Если ли способы решения этого вопроса? |
Время: 18:51. |
Время: 18:51.
© OSzone.net 2001-