powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Excel, формулы, работа с массивами.
8 сообщений из 8, страница 1 из 1
Excel, формулы, работа с массивами.
    #39998036
Conejo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста вывести программно формулу в ячейку.

В оригинале при ручном вводе она имеет вид:
{=ИНДЕКС($Z$5:$Z$34;ПОИСКПОЗ(МИН(ЕСЛИ($Z$5:$Z$34>AD5;$Z$5:$Z$34;""));$Z$5:$Z$34;0);1)}

почитав документацию и форумы, написала так:
Код: pascal
1.
2.
                ExcellApp.WorkSheets[1].Cells[i+4,31].Formula :=
                    '=INDEX($X$5:$X$34,MATCH(MIN(IF($X$5:$X$34>AD'+IntToStr(i+4)+',$X$5:$X$34,"")),$X$5:$X$34,0),1)';



На выходе все похоже на оригинал, но без фигурных скобок, и поэтому не работает.

Почитала еще интернет, нашла что вместо Formula надо писать FormulaArray, но при таком исправлении
Код: pascal
1.
2.
                ExcellApp.WorkSheets[1].Cells[i+4,31].FormulaArray :=
                    '=INDEX($X$5:$X$34,MATCH(MIN(IF($X$5:$X$34>AD'+IntToStr(i+4)+',$X$5:$X$34,"")),$X$5:$X$34,0),1)';


выдает ошибку
"Нельзя установить свойство FormulaArray класса Range".

Как заставить ее работать?
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #39998173
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Включите запись макроса, введите формулу и по Alt+F11 увидите в коде что нужно чему присвоить.
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #39999683
Anton_1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Conejo
Помогите пожалуйста вывести программно формулу в ячейку.

В оригинале при ручном вводе она имеет вид:
{=ИНДЕКС($Z$5:$Z$34;ПОИСКПОЗ(МИН(ЕСЛИ($Z$5:$Z$34>AD5;$Z$5:$Z$34;""));$Z$5:$Z$34;0);1)}


не вставляется ваша формула, EXCEL говорит: "Ошибка в формуле"
руками не вставляется, поэтому и у вас наверное ошибки
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #39999718
Anton_1234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_1234
Conejo
Помогите пожалуйста вывести программно формулу в ячейку.

В оригинале при ручном вводе она имеет вид:
{=ИНДЕКС($Z$5:$Z$34;ПОИСКПОЗ(МИН(ЕСЛИ($Z$5:$Z$34> AD5 ;$Z$5:$Z$34;""));$Z$5:$Z$34;0);1)}


не вставляется ваша формула, EXCEL говорит: "Ошибка в формуле"
руками не вставляется, поэтому и у вас наверное ошибки


вот так макрос сработал

Код: vbnet
1.
2.
3.
4.
5.
Sub qwerty4()
    Range("A5").Select
    Selection.FormulaArray = _
        "=INDEX(R5C26:R34C26,MATCH(MIN(IF(R5C26:R34C26>R5C30,R5C26:R34C26,"""")),R5C26:R34C26,0),1)"
End Sub



в ячейке A5 оказалась вот такая формула
{=ИНДЕКС($Z$5:$Z$34;ПОИСКПОЗ(МИН(ЕСЛИ($Z$5:$Z$34> $AD$5 ;$Z$5:$Z$34;""));$Z$5:$Z$34;0);1)}

один адрес поменял, сделал абсолютную ссылку (красным выделена)
в коде вот где
"=INDEX(R5C26:R34C26,MATCH(MIN(IF(R5C26:R34C26> R5C30 ,R5C26:R34C26,"""")),R5C26:R34C26,0),1)"
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #40000211
Conejo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton_1234,

У меня вставлялась и изначальная формула, и с такой абсолютной ссылкой тоже вставляется, но при попытке сделать это программно, вылезает все тот же "Нельзя установить свойство FormulaArray класса Range".
При записи макроса выдаются 4 кавычки вместо 2х, это единственное отличие от того что было у меня. Попробовала и с двумя, и с 4мя, и через Selection как в макросе, результат все тот же(((
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #40000357
Conejo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заработало... Русскими буквами и вместо запятых ;. Всем большое спасибо!!!
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #40000366
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передавайте на русском
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm1.FormCreate(Sender: TObject);
var
  App: Variant;
begin
  App := GetActiveOleObject('Excel.Application');
  App.ActiveWorkbook.WorkSheets[1].Cells[7, 3].FormulaArray := '=СУММ(R[-5]C[-1]:R[-1]C[-1]*R[-5]C:R[-1]C)';
  App.ActiveWorkbook.WorkSheets[1].Cells[8, 3].FormulaArray := '=ИНДЕКС($Z$5:$Z$34;ПОИСКПОЗ(МИН(ЕСЛИ($Z$5:$Z$34>AD5;$Z$5:$Z$34;""));$Z$5:$Z$34;0);1)';
end;



Такая же фигня с форматами
Код: pascal
1.
2.
//Зачем завершение нулём не помню, но без него в каких то случаях не работало
rng.Columns['D:P'].NumberFormat := '# ##0,00_ ;[Красный]-# ##0,00\ '+#0;



Пока писал ответ уже сами нашли.
...
Рейтинг: 0 / 0
Excel, формулы, работа с массивами.
    #40000375
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
istrebitel
Передавайте на русском
Не передавайте никак.
Такого рода формулы нужно настроить в шаблоне со ссылкой на именованный/динамический диапазон, а при выгрузке данных его переопределять.
И никакого геморроя с кривой локализацией VBA.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Excel, формулы, работа с массивами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]