1 Отредактировано Yury Vitovsky (2019-11-06 10:37:17)

Тема: Вписать формулу в отчет MS Excel

Добрый день.
Спрашивают - как это сделать. Написать тут стесняются;-), поэтому напишу сам про свои наблюдения.
Есть 2 варианта.
1. Текст формулы задается в теле запроса отчета в spFormBuilder примерно так (формулы пишутся на языке локализации вашего Excel):

SELECT f1, ..., fn, "=ЕСЛИ(RC[-3]-RC[-2]>0;ЕСЛИ(RC[-3]-RC[-2]>RC[-1];RC[-1];RC[-3]-RC[-2]);0)" AS myFormula FROM myTable

2. На отчет вешается Дополнительный Макрос примерно такого содержания (формулы пишутся на английском, это VBA):

Sub SetFormula()
Dim StartRow, EndRow, LastRow
Dim ws As Worksheet
Dim rng As Range
Const FooterHeight = 3 'это смещение вверх последней строки, куда вписываются формулы, относительно последней строки отчета (высота подножия)
Const FormulaColumn = 3 ' колонка, куда вписываем формулу
Const FormulaText = "=RC[-2]*RC[-1]" ' впишите сюда свою формулу в формате ссылок R1C1

Set ws = ActiveSheet

StartRow = ws.AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible).Row + 1  'первая строка данных отчета определяется как следующая за строкой фильтра
LastRow = ws.Cells.SpecialCells(xlLastCell).Row
EndRow = LastRow - FooterHeight

Set rng = ws.Range(Cells(StartRow, 3), Cells(EndRow, 3))
rng.FormulaR1C1 = FormulaText

End Sub

Мне кажется, что второй вариант правильнее, т.к. формулу нужно вписать именно в свойство ячейки Formula, а не Value (а именно так происходит при импорте текстового файла), ибо во втором случае пути Excel неисповедимы - захочет он этот текст интерпретировать как формулу или оставит текстом. Практика показывает, что один и тот же отчет на разных машинах получался и так, и так.

Напишите, пожалуйста, о своем опыте.

2

Re: Вписать формулу в отчет MS Excel

это смотря как формировать отчет же wink

но привязываться к языковой версии - это треш, конечно

3

Re: Вписать формулу в отчет MS Excel

Добрый день! Спасибо, оба варианта работают, но в данном случае идеально подошёл первый вариант. Второй оставим для других отчётов. 
Примерно так
SELECT dc.data AS dcdata,....., '=ЕСЛИ(RC[-1]=0;0;RC[-8]/RC[-1]*1000)' as plot_exp ,
       '=ЕСЛИ(RC[-2]=0;0;RC[-6]-RC[-2])' as rizn_exp
Больше стесняться  не будем, есть еще вопросы.

4

Re: Вписать формулу в отчет MS Excel

@Nadiia Andriychenko

>идеально подошёл первый вариант
У меня другая информация от ОМБ :-)
Олег
Капец у мене не працює, а на іншому компі працює. Щось з Excel

Yury
Повторюю запитання - який тип стовпчика в spFormBuilder?
Олег
У мене , не працює з любим.
У Наді працює і без типу , і з C і з N

5

Re: Вписать формулу в отчет MS Excel

@Dr.Sydorenko
>но привязываться к языковой версии - это треш, конечно

А в чем треш? Когда мы пишем руками формулу в ячейку, то делаем это на языке локализации своей копии Excel и ни на каком другом. Тут вроде тоже самое. Не?

6 Отредактировано Nadiia Andriychenko (2019-11-07 16:38:25)

Re: Вписать формулу в отчет MS Excel

Добрый день!  Идеально подошёл первый вариант с использованием стиля ссылок R1C1, а капец был при использовании  классической  системы адресации к ячейкам листа в Excel ($A$1). Теперь возникла необходимость раскрашивать строки в зависимости от значения данных в определенной колонке. Как в примере, по наименованию контрагента. Заранее спасибо.

Post's attachments

Книга2.xlsx 12.48 kb, 2 downloads since 2019-11-07 

You don't have the permssions to download the attachments of this post.

7

Re: Вписать формулу в отчет MS Excel

Yury Vitovsky пишет:

@Dr.Sydorenko
>но привязываться к языковой версии - это треш, конечно

А в чем треш? Когда мы пишем руками формулу в ячейку, то делаем это на языке локализации своей копии Excel и ни на каком другом. Тут вроде тоже самое. Не?

А если, вдруг, захочется запустить в Excel другой языковой версии?

Кстати, у меня украинская версия, в формулу могу писать, например, IF()...

8

Re: Вписать формулу в отчет MS Excel

Nadiia Andriychenko пишет:

Добрый день!  Идеально подошёл первый вариант с использованием стиля ссылок R1C1, а капец был при использовании  классической  системы адресации к ячейкам листа в Excel ($A$1). Теперь возникла необходимость раскрашивать строки в зависимости от значения данных в определенной колонке. Как в примере, по наименованию контрагента. Заранее спасибо.

Добрый день. Вот сделал Вам пример, как можно раскрашивать строки на основании их значений.
https://www.wgsoftpro.com/files/row_highlighting.xlsm
Для этого служит условное форматирование.
Введите искомое слово и нажмите кнопочку:-)