Страницы: 1
RSS
Как вписать Excel'вскую формулу через VBA?
 
Подскажите добрые люди, как вписать через макрос в ячейку "K1" следующую формулу:
Код
=ЕСЛИОШИБКА(ЕСЛИ((СЧЁТЕСЛИ(L1:FE1;"0")+2*СЧЁТЕСЛИ(L1:FE1;"0+0")>СУММ(L1:FE1)*0,15);(СУММ(L1:FE1)+СУММ(L1:FE1)*0,15);(СУММ(L1:FE1)+СЧЁТЕСЛИ(L1:FE1;"0")+2*СЧЁТЕСЛИ(L1:FE1;"0+0")));"")
Пожалуйста!
Код
Range("K1").FormulaLocal
не помогает
Изменено: bekzus - 07.03.2015 18:15:40
 
Подскажу :) Выделите ячейку с формулой, в окне Immediate наберите ?activecell.Formula <Enter>
Скопируйте полученную строку и используйте ее в коде
Код
Range("K1").Formula = "..."
Каждую кавычку внутри строки удвойте.
 
Уже не знала куда деться. Не могла найти окно immediate. :oops: В конце концов нашла! :D
Ура! Все работает! Класс. Спасибо Казанский! Большое!
 
Скопировать формулу без знака "=".
Выйти из ячейки.
Вернуться.
Включить запись макроса, нажать "=", и вставить формулу, нажать Enter.
Выключить запись.
В записанном макросе будет FormulaR1C1.

Код
Range("K1:K1000").FormulaR1C1 = "что записалось"
 
Благодаря Вам теперь я знаю целых 2 способа как это сделать!! Спасибо большое!
 
RAN зачем так усложнять (вырезать, вставлять). Просто включаем запись. Становимся на ячейку с формулой жмем F2 потом Enter. И все.
 
Мдааа, круто!
 
А можете объяснить почему сумма через макрос выдает другую сумму чем должно быть на самом деле?
Код
Sheets("Закончил").Cells(LastRow + 1, 11).Value = Application.Sum(Range(Cells(3, 11), Cells(LastRow, 11)))
Очень странно, так как вроде все работает но выходит постоянно небольшая разница с реальной суммой. Как будто не досчитывает что-то.
Изменено: bekzus - 07.03.2015 19:29:35
 
Может, дело в отображении знаков после запятой? Там где формула - одно количество, там где макрос - другое?
Кому решение нужно - тот пример и рисует.
 
Спасибо что отозвались Пытливый.
Я подозревала, что в этом дело. Только теперь как доверять макросам?
А можно как то заменить эту формулу на другую более надежную?
 
Можно добавить округление. Как-то так, например (до 2 знака после запятой):

Код
Sheets("Закончил").Cells(LastRow + 1, 11).Value = Application.Round(Application.Sum(Range(Cells(3, 11), Cells(LastRow, 11)));2)

Но, как по мне - гораздо проще вставить формулу:
Sheets("Закончил").Cells(LastRow + 1, 11).FormulaLocal="=ОКРУГЛ(СУММ(K3:K" & LastRow & ");2)"
Изменено: Пытливый - 07.03.2015 19:54:06
Кому решение нужно - тот пример и рисует.
 
Цитата
bekzus написал:
но выходит постоянно небольшая разница с реальной суммой.
Только теперь как доверять макросам?
Приложите файл с тем, что у вас есть, а как-то гадать не очень хочется, что там у вас за "реальные суммы".
There is no knowledge that is not power
 
Нашла альтернативу!
Код
Sheets("Закончил").Range("K1").FormulaR1C1 = "=sum(R[1]C:R[" & CStr(LastRow - 1) & "]C)"
Спасибо!
 
Цитата
bekzus написал: Только теперь как доверять макросам?
Да не должно быть разницы: я очень часто использую Application.WorksheetFunction.Sum(Диапазон)  - никогда не видел ошибки))
 
Надо элементарно установить одинаковое кол-во знаков после запятой в ячейках с числами и в ячейке с общей суммой. Добавить вручную формулу суммы. Сверить результат формулы и макроса.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Думаю Cells(3, 11), Cells(LastRow, 11) берутся из какого-то другого листа :)
 
Хы!... А, кстати, ув. Hugo, возможно, очень даже прав! :)
Я до сих помню, как на этом обжигался и тупил - спасибо ув. The_Prist за  разъяснение тогда.
Кому решение нужно - тот пример и рисует.
 
Да, вероятно Игорь прав. Формула записывается на лист Закончил, а ячейки для суммирования в Application.Sum берутся с активного на момент записи листа.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх