![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Форумчанин
Регистрация: 12.11.2009
Сообщений: 258
|
![]()
столкнулся с проблемой. есть формула вот такого вида.
"=(($B$4+$B$5+$B$6+$B$10)*(B24*$B$7 +(B18+B20+B22+B24)*$B$10))/(($B$8+$B$7+$B$10)*($B$4+$B$5+$B$6+ $B$10)-$B$10^2)-($B$10*(B18*$B$5+(B18+B20)*$B$6+(B1 8+B20+B22+B24)*$B$10))/(($B$8+$B$7+$B$10)*($B$4+$B$5+$B$6+ $B$10)-$B$10^2)" 220 знаков надо применить команду Цитата:
проблема в том что определить корректное место разрыва не вижу возможности а если разорвать в произвольном месте без учета скобок, т.е получить выражение вида s = "(($B$4+$B$5+$B$6+$B$10)*(B24*$B$7+ (B18+B20+B22+B24)*$B$10))/(($B$8+$B$7+$B$10)*($B$4+$B$5+$B$6+ " то оно тоже не обработается. что делать ? как выйти из ситуации ? погуглил. проблема попадается - решение пока не попалось (( http://www.mrexcel.com/forum/showthread.php?t=208317 Последний раз редактировалось bdfy; 08.09.2011 в 21:18. |
|
![]() |
![]() |
![]() |
#2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
А зачем вы конвертируете формулу???
Формула изначально имеется в виде текстовой строки, или хранится в ячейке? |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 12.11.2009
Сообщений: 258
|
![]()
я весь код написал эдак год назад... помню далеко не все
![]() сейчас макрос посыпался - на длинной формуле. проблема именно в этом преобразовании. в макрос формула передается в виде текстовой строки. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Там результирующая формула, наверно, получается длинее 255.
Можно с помощью регулярных находить выражения в скобках, конвертить и сохранять, для перехода к следующему уровню заменять на уникальное случайное число. А лучше ИМХО оптимизировать формулы.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Последний раз редактировалось Казанский; 09.09.2011 в 13:03. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Ан нет, не длиннее 255. Попробуйте:
Код:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 12.11.2009
Сообщений: 258
|
![]()
спасибо. работает ваш код. до сих пор прадва не пойму как ((
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Оформил в виде функции, с комментариями. Пример использования в файле.
Код:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 12.11.2009
Сообщений: 258
|
![]()
в который раз убеждаюсь какое же все таки VBA зло... сколько трудов чтобы элементарную вещь заставить работать правильно. спасибо буду использовать ваш код. хотя возможно лучше на RegEx'ах переписать функцию конвертации формул в перспективе
|
![]() |
![]() |
![]() |
#9 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Если же хорошо знаешь возможности VBA, и изначально продумываешь, что и как должно работать, - вдруг выясняется, что для решения сложнейшей задачи достаточно одной формулы, или нескольких строк кода. Цитата:
За эти годы я использовал Application.ConvertFormula всего один раз, и RegExp около 10 раз. PS: Если формула нормально составлена - никакие RegExp не нужны (и тем более, преобразования типа ConvertFormula). Вы пытаетесь бороться со следствием проблемы, а не с её причиной. У нас на форуме много спецов по формулам - давно бы привели ваши формулы к нормальному виду (если бы вы показали свой файл, и описали, что надо получить в результате) PPS: Список ссылок на ячейки можно и без RegExp вытащить - у объекта Range есть свойства Dependents и Precedents (о которых вы, видимо, не знали)
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 11.09.2011 в 21:57. |
||
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Вы бы описали задачу целиком, а не отдельными частями. Наверняка можно реорганизовать данные, изменить алгоритм, чтобы уйти от монструозных формул.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как обрабатывать события с задержкой? | gramp | Microsoft Office Excel | 9 | 12.06.2011 21:36 |
Excel. Длинные формулы. | v00d00 | Microsoft Office Excel | 4 | 14.01.2010 18:31 |
Как обрабатывать данную ситуацию? | Arkuz | БД в Delphi | 2 | 08.12.2008 02:51 |
Как заставить компонент TTrackBar обрабатывать события мыши? | Никки | Общие вопросы Delphi | 5 | 29.08.2008 14:17 |
как обрабатывать события с клавы? | proglamer | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 25.10.2007 11:41 |