Страница 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
Алексей
Тоже думал над этим вариантом, но пока думал и искал доку по экселю, натолкнулся на эту формулу :) Формула получается в разы короче.
Хотя на будущее учту, что есть функция добавления подстроки в ячейку. Вопрос, можно ли этой функция корректировать формулу, т.к. она звучит как xlAddCellStringValue