Только недавно была похожая тема. Вопрос к предложениям, а вы все символы пробелов так меня станете? Их же много... Не проще оставить только цифры и разделитель? Типа так (сорри, я с телефона сейча
Код
Function DataPrep(str As String) As String
Dim ch As String, i As Long
For i = 1 To Len(str)
ch = Mid(str, i, 1)
If ch = "." Then DataPrep = DataPrep & ","
If ch Like "[,0-9]" Then DataPrep = DataPrep & ch
Next i
End Function
Довелось мне некоторое время проводить аппроксимацию номограммы в логарифмических осях. Для тех кто не знает, это вот такие: Оказывается штатными средствами аппроксимации экселя получить уравнение не получится. Например для одной кривой и полиномиальном тренде имеем вот такое При этом коэффициенты линии тренда совпадают с коэф-ми полученными через ЛИНЕЙН (см.табличку над графиком).
Для того чтобы получить уравнение следует: 1. Произвести преобразование исходных данных прологарифмировав их 2. Найти коэ-ты полинома (ai) на основании преобразованных данных 3. Считать по уравнению Y = 10 ^ (Σ ai·(log10(x))^i) В результате имеем хорошее приближение
как то так... Естественно всё это было автоматизировано с получением единого UDF для всей номограммы , но это совсем другая история.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A10000")) Is Nothing Then
Dim Cell
Cell = Target.Value
If IsDate(Cell) Then
If Replace(Cell, "/", ".") = Format(Cell, "dd/mm/yyyy") Then
Exit Sub
End If
End If
MsgBox "Неверная дата" & Cell
End If
End Sub
sokol92, маленькое дополнение. Т.к. основную боль доставляют не просто пробелы пробелы, а неразрывные пробелы, сжатые пробелы и т.д. то вместо
Код
Selection.Replace " ", "", xlPart
я бы использовал UDF типа такой (не претендую на оптимальность).
Код
Function DataPrep(str As String) As String
Dim ch As String, i As Long
For i = 1 To Len(str)
ch = Mid(str, i, 1)
If ch = "." Then DataPrep = DataPrep & ","
If ch Like "[,0-9]" Then DataPrep = DataPrep & ch
Next i
End Function
Интересный, с моей точки зрения, вид номограмм. Номограммы с переломом. Т.е. есть некая функциональная зависимость места резкого изменения характеристики. В качестве примера - простой вариант если искать решение как для обычных номограмм, а именно взять значения до и после и решить через пропорцию, то результат будет ошибочным. Например требуется построить (узнать значение) для Х2 = 3. (изначально заданы кривые при Х2 = 2, 4, 6, . Найдём точку при Х1=10 Х2=3. Искомое между Х2=2 и Х2=4. Здесь и далее для упрощения кусочно линейно интерполирую. Х1=10 Х2=2 => Y = 9 Х1=10 Х2=4 => Y = 6.33 (общий наклонный участок) Через пропорцию Х1=10 Х2=3 => Y = 7.66 Просчитывая другие точки получаем линию Х2 = 3 (красный пунктир) Очевидно что решение не верное-кривая Х2 = 3 должна отходить от общей линии начиная с Х1 = 10.5. Верные значения начинаются для значений с Х1=12, т е. с момента начала отхода кривой Х2=4 от общей линии. Для устранения этого казуса можно разбить номограмму на две: общий участок и отходящие затем для каждой из частей ищем решение (строим две кривые для искомого Х2) И результат будет максимум (в данном случае вогнутого вида номограммы) из двух решений
В качестве примера привёл простой вариант. Существуют более сложные зависимости, которые так же нельзя решать простым способом. В частности эта особенность номограмм характеристик эжекторов и не только. Автоматизацию создания макросов для Г-образных номограмм показывал тут https://rutube.ru/video/280dd5afa3efab15d7f6d0ca4f9fef46/?r=wd
Kotyn, Для такого тапа номограмм (тип воронка) скорее всего не выйдет. Применяйте тип линейчатой номограммы - там можно брать значения из сторонних ячеек
Public Function pos4itat(txt As String) As Variant
Dim rez As String: rez = ""
Dim i As Long
On Error GoTo ErrHandl
For i = 1 To Len(txt)
simv = Mid(txt, i, 1)
If simv Like "[0-9,x,х,.,*,chr(44)]" Then
If simv = "х" Or simv = "x" Then simv = "*"
If simv = "," Then simv = "."
rez = rez & simv
End If
Next i
pos4itat = Evaluate(rez): Exit Function
ErrHandl: pos4itat = "Ошибка исходных данных."
End Function
Изменено: tutochkin - 10.05.2025 13:55:14(х и x это две разные х... :))
Ronin71, ну так и задумано. Сие видно сразу (хотя не факт...). Полезут исправлять, исправят и... и остальное (корректировки работы макросов) оставят. А что не правильно стало работать - так тут сразу и не поймёшь, народ успокоился... а как поймут спустя время - так сами в код лезали, вдруг что сами напортачили.
А что "не факт", так листы изначально можно сделать "суперскрытыми" (по умолчанию, и при закрытии файла), и макрос при нормальном процессе работы их переводил в видимый формат. При ненормальном - удалял.
Но опять же - это всё баловство, и мелкие пакости. Если заказ - то 100% предоплата. Или договор, если сумма значима. Иначе - спасибо, приходите ещё. ПыСы может я и не прав.
Ronin71, ну тема не нова... Однако 1. Чтобы макрос сам удалил модули нужны определённые права на машине где файл запущен, если я правильно помню. 2. Если есть возможность запустить/открыть без выполнения макросов (а открывать можно и не в МSO), то при наличии опыта и желания можно "вылечить" зловредность.
Для себя понял что сделать коммерческий продукт с возможностью лицензий и т.д. фактически не реально (либо трудозатраты на защиту будут выше чем на сам проект собственно).
А так... В качестве "пакости" можно: 1. Корректировка результатов работы программы. Уж в языке М замена пары символов может привести к очень интересным результатам... 2. Несохранение результата, или сохранение с корректировкой рандомной. Либо заменой всех (или не всех...) формул на листах на значения...
Опять же - это лечится, но ... но "работает не верно" совсем не то же что "не работает".
Впрочем это не более чем мысли в слух, ибо разработкой проектов на заказ не занимаюсь. Хотя свои наработки по работе стал таким макаром шифровать, а то поток "временных" работников велик, и не хочу раздавать своё в сторонние организации. Как сделать - показываю. Хотят сделать сами - ноу проблем. Иначе через некоторое время получают что то вроде этого
Глянул старый косяк - неадекватность работы с графиками (что в Р7 что в ОО) Кто хочет - может проверить. Исходные данные на листе. График точечный 1. Шкала в настройках не соответствует шкале графика 2. Никаким боком не выйдет поставить шкалу с третьим знаком после запятой (например 0.011...)
Т.к. я много работаю с номограммами мне это очень важно. Про сие писал более года назад на почту Р7 и... и всё как было.
sokol92, если послушать доклад, что по ссылке выше, или почитать чат в телеге, то выяснится что не в этом трабла. Основная проблема что поведение меняется в зависимости от версии Р7. Т.е. "раньше при вставке преобразовывалось в дату, теперь в текст " (с). Что будет потом никто не скажет.
ПыСы ставить себе несколько версий Р7 и отслеживать что где как, являясь по сути бетатестером за свои деньги, желания нет. И я с ужасом жду обязания перехода на это поделие.
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.
написал: Конечно из-за полученных величин проверить корректность напрямую в эксель невозможно, но принцип простой - от степенной функции перешли к линейной, для которой определили методом минимума среднего квадрата ошибки параметры, потом вернулись к степенной функции
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.