Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Excel. Формулки. Скрипт v.5

Excel. Формулки. Скрипт v.5

Ответ
Поиск в этой теме
Непрочитано 23.03.2008, 12:14 #1
Excel. Формулки. Скрипт v.5
YRat
 
Support - ACD, ASD, ACA, ACM, RAC, RST
 
Stuttgart-Петербург
Регистрация: 19.10.2004
Сообщений: 238

Доброго времени суток
Предлагаю скрипт функции. Функция записывает формулу указанной ячейки в числах с подстановкой (в другой ячейке разумеется).
Для чего? Иногда надо чтобы "ход расчёта" был виден. С этим в экселе при распечатке плохо - не проверить как и откуда получилось то или иное значение.

Код:
Код:
[Выделить все]
Public Function zFrml(i As Range) As String
Application.Volatile True
Dim str As String
str = i.Formula
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
        .MultiLine = False
        .Global = True
        .IgnoreCase = True
        .Pattern = ",\d+\)|[ROUNDPWN]{4,10}\("
End With
str = RegEx.Replace(str, "")
With RegEx
        .MultiLine = False
        .Global = True
        .IgnoreCase = True
        .Pattern = "([A-Z]{1,2}\d{1,5})"
End With
str = RegEx.Replace(str, """&$1&""")
Set RegEx = Nothing
str = Replace(str, "*", Chr(183))
str = Replace(str, "=", "=""")
If (InStr(str, "&") = 2) Then str = Replace(str, "=&", "=")
If (InStr(str, """&") = 2) Then str = Replace(str, "=""&", "=")
If (InStrRev(str, "&") < Len(str)) Then str = str + "="""
If (InStrRev(str, "&") = Len(str)) Then str = str + """="""
str = Evaluate(str)
str = Replace(str, ".", ",")
zFrml = str
End Function

Public Function zFrml3(i As Range, units As String) As String
Application.Volatile True
Dim str As String
str = i.Formula
Dim va As String
va = i.Value
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
        .MultiLine = False
        .Global = True
        .IgnoreCase = True
        .Pattern = ",\d+\)|[ROUNDPWN]{4,10}\("
End With
str = RegEx.Replace(str, "")
With RegEx
        .MultiLine = False
        .Global = True
        .IgnoreCase = True
        .Pattern = "(([A-Z]{1,2}\d{1,5})|(zZif\([A-Z]{1,2}\d{1,5}\)))"
End With
str = RegEx.Replace(str, """&$1&""")
Set RegEx = Nothing
str = Replace(str, "*", Chr(183))
str = Replace(str, "=", "=""")
If (InStr(str, "&") = 2) Then str = Replace(str, "=&", "=")
If (InStr(str, """&") = 2) Then str = Replace(str, "=""&", "=")
If (InStrRev(str, "&") < Len(str)) Then str = str + " = """
If (InStrRev(str, "&") = Len(str)) Then str = str + """ = """
str = str + "&" + i.Address
If (Len(units) > 0) Then str = str + "&"" [" + units + "]"""
str = Evaluate(str)
str = Replace(str, ".", ",")
zFrml3 = str
End Function

Public Function zZif(i As Range)
Application.Volatile True
Dim str As String
str = i.Formula
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
        .MultiLine = False
        .Global = True
        .IgnoreCase = True
        .Pattern = "=zFrml3\(([A-Z]{1,2}\d{1,5})+,[\d\D""]{2,5}"
        
End With
str = RegEx.Replace(str, "$1")
Set RegEx = Nothing
str = Range(str).Value
zZif = str
End Function
На картинке видно название функции и её применение.
Надеюсь пригодиться ещё кому-нить.

Ещё кое-что полезное - xla-надстройка. Для чего? Для форматирования текста в ячейках. В паре с вышеперечисленными функциями дает неплохой вариант оформления.
В общем-то на миниатюре видно как оно всё выглядит, тратить времени на это форматирование я стал меньше, факт

Миниатюры
Нажмите на изображение для увеличения
Название: mask.gif
Просмотров: 779
Размер:	15.3 Кб
ID:	4766  

Вложения
Тип файла: zip FormulaEdit toolbar.zip (28.1 Кб, 346 просмотров)

__________________
без DWG мы никуда - и не туда, и не сюда...
Спасибо за то, что Вы есть, коллеги ;)

Последний раз редактировалось YRat, 06.08.2010 в 14:40. Причина: Изменение скрипта. v.6
Просмотров: 13631
 
Непрочитано 23.03.2008, 22:59 Супер
#2
SLADE

проектировщик-новобранец
 
Регистрация: 14.09.2005
Minsk
Сообщений: 324


Отличный скрипт, конечно пригодится.
Я раньше это все делал вручную
Не во всех столбцах у меня работает (А,С,I,N,O,S,T, AA и далее = не работает ), вместо чисел пишет ссылку, на ячейку

Последний раз редактировалось SLADE, 23.03.2008 в 23:35.
SLADE вне форума  
 
Автор темы   Непрочитано 23.03.2008, 23:57
#3
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Ага, доделаю, выложу
Кстати, любую степень типа корня, записывать не как формула корна, а как ^0.5
YRat вне форума  
 
Автор темы   Непрочитано 25.03.2008, 19:55
#4
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Поправил, вроде как работает)

п.с. поправил в первом посте!
YRat вне форума  
 
Непрочитано 25.03.2008, 20:30
#5
SLADE

проектировщик-новобранец
 
Регистрация: 14.09.2005
Minsk
Сообщений: 324


ООО сейчас отлично
SLADE вне форума  
 
Автор темы   Непрочитано 25.03.2008, 20:53
#6
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Ну гут, давно мечтал соорудить
YRat вне форума  
 
Непрочитано 25.03.2008, 21:58
#7
SLADE

проектировщик-новобранец
 
Регистрация: 14.09.2005
Minsk
Сообщений: 324


еще бы хотелось конечно что бы при ссылке на ячейку где присудствует в формуле функции, типа МАкс, мин впр, гпр и подобные ищущие значения писала найденое значение .
=A4-A3*A2*SIN(A1)+ВПР(B6;A1:E4;2;0)
4-34•2•SIN(1)+VLOOKUP(34,1:4,2=
В противном итоге придется поиск значений выполнять в соседних ячейках.
SLADE вне форума  
 
Автор темы   Непрочитано 25.03.2008, 22:05
#8
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Если Вы мне дадите эксель файлик со всеми (или наиболее частыми) функциями такими я подумаю над ним, ато у меня на русском нет ёкселя =)
ОТправить можно на почту, только с пометкой ([email protected])
YRat вне форума  
 
Непрочитано 25.03.2008, 22:14
#9
SLADE

проектировщик-новобранец
 
Регистрация: 14.09.2005
Minsk
Сообщений: 324


Пока конкретного нету примера, как только так сразу. ПОКа ВСЕ СУпер

раньше приходилось делать так в ячейке
="в этой формуле h* = [h·(Pγ+3·Pq)] / [3·(Pγ+2·Pq)] = ["&C5&"·("&I73&"+3·"&I76&")] / [3·("&I73&"+2·"&I76&")] = "&J108&" м"
для получения результата:
в этой формуле h* = [h·(Pγ+3·Pq)] / [3·(Pγ+2·Pq)] = [2.4·(13.48+3·3.996)] / [3·(13.48+2·3.996)] = 0.949 м

теперь достаточно написать
"в этой формуле h* = [h·(Pγ+3·Pq)] / [3·(Pγ+2·Pq)] = "&zFrml(J108)&" "&J108&" м"
результат:
в этой формуле h* = [h·(Pγ+3·Pq)] / [3·(Pγ+2·Pq)] = (2,4•(13,48+3•3,996)) / (3•(13,48+2•3,996))= 0.949 м

как ументшить точку "•" - сделать "·"?

Последний раз редактировалось SLADE, 25.03.2008 в 22:31.
SLADE вне форума  
 
Автор темы   Непрочитано 25.03.2008, 22:18
#10
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


А, Вы имеете ввиду чтобы при обращении из другой ячейки тут было число, не, я так не могу, он возьмёт именно то, что показывает в листе
Но я подумаю.. придётся, наверное, еще одну функцию вводить =)
YRat вне форума  
 
Автор темы   Непрочитано 25.03.2008, 22:42
#11
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Чтобы точка было смените строку
str = Replace(str, "*", Chr(149))
на
str = Replace(str, "*", Chr(183))
YRat вне форума  
 
Автор темы   Непрочитано 25.03.2008, 23:44
#12
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Возможно дурацкий вопрос, но в примере в ячейке J108 все равно остается результат.. или предполагается выносить эти ячейки куда-нить за пределы печатного листа?

Там снова изменился скрипт - кое-что забыл..

Последний раз редактировалось YRat, 26.03.2008 в 00:13.
YRat вне форума  
 
Непрочитано 26.03.2008, 00:47
#13
SLADE

проектировщик-новобранец
 
Регистрация: 14.09.2005
Minsk
Сообщений: 324


то что я писал в посте 9 , это не вопрос , а просто на сколько сокращается оформление расчетов.
лично мне кажется, в плане офотмления, ячейка со всеми вычислениями "J108", её можно по желанию потом скрыть, защитить.
Я думаю, впринципе, если &zFrml(J108)&" "&J108, [2.4·(13.48+3·3.996)] / [3·(13.48+2·3.996)] = 0.949, лучше объединить в вместе , чтобы она писала сразу после выражения " = результат"
Это конечно будет полезно кто оформляет формулу с привязкой текста в ячейке "по левому краю", т.е. в длинну строку нечто не ограничивает
SLADE вне форума  
 
Автор темы   Непрочитано 26.03.2008, 14:12
#14
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


Итак, скрипт изменил, добавил еще 2 функции

zFrml3(ячейка;"единицы измерения или пусто")
Пишет формулу и результат с единицей измерения

Пример:
формула
=zFrml3(I38;"kN")

В ячейке I38
=ОКРУГЛ(B37*(B38*B39*B49+B50*B51*B52*B53);2)

результат
= 1·(1·1431,57748275·0,785+3,14·0,6·48·6) = 1666,38 [kN]


Чтобы из такой ячейки куда-нибудь вставить ТОЛЬКО значение, нужно использовать следующую функцию

zZif(ячейка с функцией zFrml3)
Функция просто вставляет результат от ячейки с предыдущей функцией
YRat вне форума  
 
Непрочитано 26.03.2008, 15:19
#15
ВладимирН

проектирование жилых и общественных зданий
 
Регистрация: 16.08.2007
Новороссийск
Сообщений: 54


простите, пожалуйста, а как это все установить?????
ВладимирН вне форума  
 
Автор темы   Непрочитано 26.03.2008, 15:50
#16
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


ВладимирН

1. Открываете новый или старый excel документ
2. F11
3. Слева выделите VBAProjekt(Книга 1)
4. Меню вверху: Вставить - Модуль
5. Скопировать туда текст скриптов и сохранить
6. Безопасность в макросах должна либо разрешать макросы либо спрашивать каждый раз "включить макросы али нет"
Ну и использовать функции как простые в ячейках

Да..функции будут работать только в тех документах, где будет этот модуль.
Как сделать чтобы везде пока не думал, наверняка можно и все давно придумано - надо искать
YRat вне форума  
 
Непрочитано 26.03.2008, 16:00
#17
ВладимирН

проектирование жилых и общественных зданий
 
Регистрация: 16.08.2007
Новороссийск
Сообщений: 54


бальшоеспасибки
ВладимирН вне форума  
 
Непрочитано 26.03.2008, 23:24
#18
SLADE

проектировщик-новобранец
 
Регистрация: 14.09.2005
Minsk
Сообщений: 324


Последнее изменение просто прелесть.
Лучшего и представить не мог.
SLADE вне форума  
 
Автор темы   Непрочитано 26.03.2008, 23:31
#19
YRat

Support - ACD, ASD, ACA, ACM, RAC, RST
 
Регистрация: 19.10.2004
Stuttgart-Петербург
Сообщений: 238


YRat вне форума  
 
Непрочитано 28.03.2008, 13:44
#20
Vik-ing

проектирование МК
 
Регистрация: 08.11.2007
Санкт-Петербург
Сообщений: 1


Хорошая штука, спасибо.
А чтобы функции были видны во всех книгах, надо сделать надстройку: пустую книгу, содержащую модуль с функциями сохранить как *.xla (надстройка). После этого загрузить сохраненный файл:
Сервис->Надстройки. Удачи!
Vik-ing вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Excel. Формулки. Скрипт v.5

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблицы из Excel в AutoCAD вставляются неполностью Nikolay_N AutoCAD 23 07.09.2019 21:12
Excel - оформление формул Добрыня Разное 4 13.09.2007 20:39
Тексты из ACAD в Excel miha AutoCAD 9 18.04.2007 13:43
Проблемы в Excel G.A.W. Разное 11 27.02.2007 12:11
Как перенести информацию из табл. в Автокаде в Excel Margarinchik AutoCAD 9 29.11.2006 19:17