Страница 1 из 1
excel. формулы. длинные формулы
Добавлено: 03 июн 2013, 16:12
Masygreen
Итак сабж. Есть файл excel его набиваем данными. Данных очень много .. надо очень хитро посчитать итоги и не просто посчитать, а забить формулой - типа для возможного редактирования.
Формулы будут длинные .. явно > 256 символов ... идеи?
мысли засунуть каждую вычисляемую ячейку в файл, а потом импортнуть макросом, но как потом задать тип ячейки формула .. хм . . хочется красивого решения с некоторым примером кода что-ле ..
Re: excel. формулы. длинные формулы
Добавлено: 03 июн 2013, 18:42
edward_K
Я написал макрос с параметрами и им добавлял.
Код: Выделить всё
if formula_0<>'='
{ xlSetCellFormula(formula_0,wexrow,2,wexrow,30)
if formula_01<>''
{ var ww_bas :string;
ww_bas:=GetStringParameter('Files','OutputFilesDirectory',0)
+'\!tmp.bas'
if fileExist(ww_bas) deletefile(ww_bas)
logstrtofile(ww_bas,'')
logstrtofile(ww_bas,'Sub AddFormula(ss As String, row As Integer, col As Integer)')
logstrtofile(ww_bas,' Cells(row, col).FormulaR1C1 = Cells(row, col).FormulaR1C1 & ss')
logstrtofile(ww_bas,'End Sub')
xlImportModule(ww_bas)
for(wexcol:=2;wexcol<=30;wexcol++)
xlRunMacro('AddFormula'+ '('+formula_01+','+string(wexrow)+','+string(wexcol)+')' )
}
}
Формат ячеек ест. делаете общий. Поскольку вызов макроса медленная процедура, то сначала формулу задаете через xlSetCellFormula(formula_0,wexrow,2,wexrow,30) , а если длиннее чем 255 символов, то макросом. Формулы удобней задавать в RC. В идеале у вас должен быть массив строк - как только длина строки + изм.формулы превысит 250 символов, увеличиваете размерность массива и номер заполняемого элемента.
Re: excel. формулы. длинные формулы
Добавлено: 03 июн 2013, 18:50
Masygreen
edward_K писал(а): В идеале у вас должен быть массив строк - как только длина строки + изм.формулы превысит 250 символов, увеличиваете размерность массива и номер заполняемого элемента.
ну поскольку хз сколько там элементов .. то будем времянку юзать .. спасибо.. будем думать ..
ЗЫ.Выстрел в воздух... когда уже будет поддержка длинных строк ((
Re: excel. формулы. длинные формулы
Добавлено: 03 июн 2013, 19:00
edward_K
Поддержка длинных строк есть, но не для формул и не для матричного вывода - xlAddCellStringValue и xlGetCellSubStringValue. А переменные с типом строка в галке - да не более 255 символов. Могли бы кончено сделать с типом variant и для длинных строк писать из мемо-поля.
Re: excel. формулы. длинные формулы
Добавлено: 04 июн 2013, 10:24
Masygreen
edward_K писал(а):Поддержка длинных строк есть, но не для формул и не для матричного вывода - xlAddCellStringValue и xlGetCellSubStringValue. А переменные с типом строка в галке - да не более 255 символов. Могли бы кончено сделать с типом variant и для длинных строк писать из мемо-поля.
ну да я знаю .. запросы вон в longint пишут .. раз уж движок не держит string over 255 давно уже надо было вводить понятие типа longstring и потихоньку вводить его в функционал ... (ожидаем финансирования ыыыыыы)
Re: excel. формулы. длинные формулы
Добавлено: 17 ноя 2015, 08:16
Алексей
Ну вот и я приплыл к значению количества символов в формуле больше 255...ничего нового там не напридумывали? Не хочется макросом пользоваться.
Re: excel. формулы. длинные формулы
Добавлено: 17 ноя 2015, 09:53
edward_K
Надо подумать. чтобы формула не была больше. И зачем именно формула - вы же можете и значение подставить.
Вообще длинные формулы лучше держать в шаблонах. И попробуйте = добавить в первую строку - а вдруг прокатит?
Re: excel. формулы. длинные формулы
Добавлено: 17 ноя 2015, 15:27
Алексей
Обошелся формулой СУММЕСЛИМН
Re: excel. формулы. длинные формулы
Добавлено: 18 ноя 2015, 10:16
edward_K
Вообще наверное прокатит первую строку записать как формулу, а последующие через функцию добавления подстрок.
Re: excel. формулы. длинные формулы
Добавлено: 20 ноя 2015, 06:25
Алексей
Тоже думал над этим вариантом, но пока думал и искал доку по экселю, натолкнулся на эту формулу
Формула получается в разы короче.
Хотя на будущее учту, что есть функция добавления подстроки в ячейку. Вопрос, можно ли этой функция корректировать формулу, т.к. она звучит как xlAddCell
StringValue