Страницы: 1
RSS
Транскрипция для формулы, Алгоритм формулы в виде текстовой строки
 
Привет, Планетяне!

Помогите написать быструю автоматически обновляемую UDF, которая будет расшифровывать алгоритм формулы в виде текстовой строки? Т.е., как в школе при решении примера, если
в A1 забита формула СУММ(T67:T68)*(100+H25)*10^-3, дающая результат 5, то
в B1 мне нужно дать расшифровку цифры 5, прописав ∑(T67:T68)•(100+H25)•10-3.

Формулу нужно написать в компактном виде, понятном для людей, не знакомых с Excel. Т.е. желательно заменить:
1 * на •
2 СУММ на ∑
3 операторы степени на верхние индексы
4 номера строк на нижние индексы (T67 на T67)
5 сложные функции (выборки и т.п.) на результат их работы в виде ссылок на ячейки (не цифр) *
* Т.е. для СУММЕСЛИ(A:A;">0";B:B) при условии A1>0 & A3>0 надо прописать ∑(A1,A3).

Хотелось бы увидеть что-то типа B1 = transcript(A1).
Как это сделать пока смутно себе представляю (п.1-4 - ещё куда не шло, п.5 - вообще ступор).
Но и вручную выполнить нереально: формул очень много, а ссылки на ячейки часто меняются в ходе расчёта.
Поэтому надеюсь на Вашу помощь!

Заранее спасибо!
 
1 без вашего словаря соответствий вряд ли
2 формулы и верх/нижн индексы не сочетаются в одной ячейке
 
если "помогите", то где Ваши попытки?
Изменено: ber$erk - 15.05.2013 14:28:46
Учимся сами и помогаем другим...
 
"Попытки" будут вечером, сейчас другой работы привалили.
Пока предполагаю что-то типа такого:
по п.1-2:
Средствами Excel
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"*";"·");"сумм";"∑")
по п.3-4:
В Excel есть надстрочные и подстрочные символы (меню "Шрифт").
Также можно ввести, например, верхний индекс: "м" & ChrW(179) - это м3...
 
0.1.2.3 есть, а остальные:4.5.6.7.8.9
 
Цитата
Также можно ввести, например, верхний индекс: "м" & ChrW(179) - это м3...

а вы это пробовали?
Учимся сами и помогаем другим...
 
м³
 
dude, это к чему?
Учимся сами и помогаем другим...
 
это сцепка м с chrw(179)
 
я к тому: как это будет выглядеть в UDF?
Учимся сами и помогаем другим...
 
__________
 
если напрямую известно какой символ надо изменять, то да, но ведь на вход подается вся строка
Учимся сами и помогаем другим...
 
Для п.5 можете почитать: Отобразить в формулах вместо ссылок на ячейки значения ячеек
Останется только сделать соответствия для наименования функций. По сути можно для всех пунктов применить прием, по крайней мере в части замены ссылок на значения.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, спасибо за ссылку!

Отличная работа!
Как считаете, можно ли сделать UDF вида transcript(A1;1/0),
где A1 - ссылка на ячейку с формулой, 1 - показать значения, 0 - показать ссылки на ячейки?

Ведь при большом количестве переменных к расчётной таблице проще прикрутить названия строк и столбцов.
Сделав подобие шахматной доски, легче ориентироваться в расчёте, не путаясь в числах...
Изменено: Acid Burn - 15.05.2013 20:42:22
 
Можно. Только подход нужен будет совершенно иной, отличный от приведенного в статье. Через регулярные выражения.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Так, пошёл читать, что такое "регулярные выражения".  :D
Спасибо!
 
На сколько я понял, надо подключить Microsoft VBScript Regular Expression 5.5 и прописать функцию для использования РВ.
РВ можно использовать для замены СУММ на ∑ и т.п.

Но, чтобы получить ссылки на ячейки вместо их значений надо написать аналог функции Val_Of_Formula.
В общем, чем дальше, тем сложнее...
Изменено: Acid Burn - 15.05.2013 21:16:27
 
Цитата
Acid Burn пишет:
Но как получить ссылки на ячейки вместо их значений?
Более глубоко погрузиться в изучение RegExp. Иначе никак.
А Вы надеялись, что будет просто?  :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо Вам за идею, Дмитрий.
Отложу "погружение" до выходных, иначе крыша съедет.  :D
 
так, постепенно, и откажетесь от этой дурацкой странной непонятной затеи.  :)

если не секрет - зачем это? и зачем именно так?
формулы в ячейках можно стандартными средствами делать более удобочитаемыми и понятными - с помощью именованных диапазонов, именованных формул, специальных UDF, наконец (правда, последний вариант, как правило, ведет к замедлению работы; но и ваша идея будет нагружать Excel "не по-детски")

я ещё понимаю ту задачу, для которой, собственно, The Prist привел ссылку, которая возникала несколько раз (правда. не слишком часто) и будет возникать ещё - заменить ссылки на значения.
да, для того, чтобы быстро разобраться в чужом и сложном файл, это может помочь.
да и то - кому как. ибо, глядя на циферки в такой формуле - =СУММ({15.7;20;111.123})*0.18, непонятно - откуда они взялись, что обозначают и почему именно столько...
а вот =СУММ(продажи)*ндс - всё понятно.

весь пост - это, конечно. оффтоп. и на него можно и не отвечать.
но такие попытки "улучшить" Excel, честно говоря, вызывают улыбку.

пс. если Вы "за выходные" сможете разобраться с регулярными выражениями в достаточном объеме - с меня шоколадка  ;)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki, это затем, что смежники привыкли считать на бумаге и оформлять расчёты в Word как раз в виде 5+10*0.18.
В итоге реально, как Вы сказали, "глядя на циферки в такой формуле, непонятно откуда они взялись".
Да и им вносить коррективы сложно - всё таки расчёты не школьного уровня, а крупного проектного института.
Я хочу доказать, что с Excel работать удобнее и на финише всё можно оформить в принятом у них виде.
Или немного лучше.  :)

Насчёт регулярных выражений: на уровне подстановочных знаков я ими владею.
В целом знаний мне хватает, чтобы делать расчёты и базы данных для проектирования заводов по всей РФ.
Конечно, в программировании я не сравнюсь с Вами или с The_Prist.
Но это - не моя работа, а лишь хобби, на которое почти не остаётся времени и сил.

Насчёт выходных: я по жизни считаю, что нерешимых задач нет и разобраться можно во всём.
Проблема - найти время (сейчас дана команда работать не менее 12 часов в день - выдача очередного объекта).
Так что не надо такого сарказма.
 
Цитата
Acid Burn пишет:
Насчёт выходных: я по жизни считаю, что нерешимых задач нет и разобраться можно во всём.
безусловно.
Цитата
Acid Burn пишет:
Конечно, в программировании я не сравнюсь с Вами или с The_Prist.
Но это - не моя работа, а лишь хобби, на которое почти не остаётся времени и сил.
для меня это тоже хобби. а так-то я работаю экономистом. и учился на него же  :) а регулярки - сами по себе достаточно сложны (не считая элементарных подстановок или выбора из перечня). научиться, ясен пень, можно. за выходные - не знаю. но сомневаюсь. и где здесь сарказм?  ;)
Цитата
Acid Burn пишет:
смежники привыкли считать на бумаге и оформлять расчёты в Word как раз в виде 5+10*0.18.
убиться  :( . я сам с таким сталкиваюсь, так что знаю хорошо.
Цитата
Acid Burn пишет:
Я хочу доказать, что с Excel работать удобнее и на финише всё можно оформить в принятом у них виде.
если люди делают в ворде, то... короче, я своим так ничего и не доказал. они считают на калькуляторе и рисуют "красоту" в ворде. делают это долго, упорно, со старанием и выдумкой. точнее - о-о-очень долго. "зарабатывают" 15 тыр. в месяц. и для них делать это намного быстрее - страшный сон: сколько ж они тогда будут "зарабатывать" и что делать в оставшиеся дни и недели?
так что - я Вам искренне желаю успехов, но... сомневаюсь (не в результате, а именно в том, что это что-то кому-то докажет)
Цитата
Acid Burn пишет:
Так что не надо такого  сарказма .
хорошая ссылка. но на многабукаф у меня аллергия. так что, сорри, читать не стал  :)
а вообще - ни в одном глазу не планировалось ни капли сарказма. просто задача достаточно сложная, муторная и... до сих опр казалась почти бессмысленной.  ;)
но если таки сарказм Вам почудился - то я прошу прощения.

пс. в лучшие (для меня) времена, наверное, поучаствовал бы... но сейчас совершенно некогда ("самому бы кто помог"))
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
ikki пишет: ни в одном глазу не планировалось ни капли сарказма
И Вы меня простите, наверное, показалось.

Сегодня начал изучать RegExp. Интересная вещь. Но пока вообще не вижу ничего подходящего ни на форуме, ни в книгах Форта / Фридла.

Cэнсеи, нужна Ваша помощь!
 
Acid Burn, попробуйте посмотреть по ссылке здесь  там в файле пользователя есть функции перевода формул. По крайней мере в файле который правил и отправлял обратно 11 Май 2010 22:44:56 какие то функции были.
 
Igor67, смотрел внимательно, что-то даже понял! Спасибо за ссылку.  :)
Сегодня сижу целый день. Сделал тестовый файл, добавил туда инфу по RegExp и несколько макросов.
Набросал таблицу подстановки, предполагаемый алгоритм и синтаксис функции.

Т.е. с чего начать вроде бы понятно, но пока ничего не получается...
Файл
Изменено: Acid Burn - 01.06.2013 17:45:29
Страницы: 1
Наверх