Возврат по версии яндекса
Так происходит общение с яндексом. Не то что жалко этих денег, хотя и это тоже, просто сам факт , что тебя пытаются поиметь на ровном месте слегка напрягает
Так происходит общение с яндексом. Не то что жалко этих денег, хотя и это тоже, просто сам факт , что тебя пытаются поиметь на ровном месте слегка напрягает
Пост в ответ на коментарии https://pikabu.ru/story/trebuetsya_pomoshch_s_tablitsey_9232263?utm_source=linkshare&utm_medium=sharing
Внезапно, чтобы при вводе данных в ячейку А1 произошли вычисления в ячейке В1 вовсе не обязательно иметь непосредственно в ячейке В1 формулу связанную с ячейкой А1. Да и вообще формулу там иметь не обязательно (0_о). Пример - https://cloud.mail.ru/public/pBRc/rd1RhvKjb
При вводе числа в выделенную ячейку столбца С в той же строке столбца В будет выведен квадрат введённого числа. Квадрат только в качестве примера. Можно, например, дату ввода данных в ячейку фиксировать :)
Естественно макрос имеет место быть (в коде листа).
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C3:C15")) Is Nothing Then
Target.Offset(0, 2).Value = Target.Offset(0, 0).Value * Target.Offset(0, 0).Value
End If
End Sub
где:
"C3:C15" - контролируемые ячейки
Target.Offset(0, 2).Value - данные выводятся в ячейку на две правее от той в которой произошли изменения.
В остальном согласен с другими ответами - предложенный топикстартером документ расчётов не содержит
Добрый день. Сегодня хотелось бы рассказать про виртуальную ось в экселе :).
Для примера попробуем решить задачку поворота графика на 90°. Т.е. чтобы линии строились не вдоль оси Х, а вдоль Y. Чисто ради примера...
Для этого потребуется... внезапно... построить ещё один график, который нам и заменит ось Y.
Методика построения для двух линий (см.рисунок ниже):
1. Создаём два дополнительных столбца равных по величине исходным данным. Столбец Х3 с равными значениями меньше минимального значения (для левого расположения оси) исходных данных. Столбец Y3 - с нумерацией исходных данных.
2. Строим три точечных графика (иксы и игрики пометил в названиях столбцов). Точнее диаграмму с тремя точечными графиками на ней... Не отдельные графики.
3. Настраиваем оси (мин/макс), при этом минимум по оси Х должен равняться значению заданному в Х3 (для левого расположения оси). Убираем отображение подписей. Убираем/настраиваем сетку.
4. Для 3-го (виртуального) графика включаем отображение меток данных, отключаем отображение осей ХY, указываем данные из ячеек как подписи, указываем расположение меток слева .
5. Меняем размер зоны построения, чтобы метки влезали красиво.
6. Настраиваем вид виртуальной оси (третьего графика) - вид маркеров, цвет линии и т.д.
Если нужно подписи иметь справа, то Х3 больше максимального значения исходных данных, Хмакс = Х3 и расположение меток - справа.
Как видно - совсем не трудное решение значительно расширяет функционал экселя в плане отображений.
Я думаю что понятно, это только пример... Как вариант другого применения - отображение меток событий неделя/месяц/год/квартал/полугодие...
============
ПыСы я немного заработался - готовлюсь к сдаче экзамена в РосТехНадзор... Не до постов пока. Всё таки в сорок лет учиться труднее чем в 20ть. Печаль...
Сегодня расскажу про простой способ разукрасить диаграммы, а именно заменить маркеры на произвольные рисунки.
Установка рисунков в качестве маркеров позволяет разнообразить внешний вид документации, сделав её нагляднее. Установка смайлов (© http://www.kolobok.us/ ) сделана в качестве примера (помните про Aiwan то? Или забыли...).
Для гармоничного отображения требуется проредить количество маркеров, в противном случае произойдёт наложение рисунков друг на друга. О прореживании писал ранее.
Заменить маркеры на рисунки, в данном случае они представлены смайлами, можно при помощи не сложного макроса
Sub Markers_Smiles()
ActiveSheet.ChartObjects("Диаграмма 1").Activate
For Each icell In [C2:C102]
ActiveChart.FullSeriesCollection(1).Points(icell.Row - 1).Select
' Убираю рамки вокруг маркеров
Selection.MarkerForegroundColorIndex = xlNone
' Установка типа маркера «Рисунок»
Selection.MarkerStyle = -4147
Selection.Format.Fill.UserPicture "D:\4.gif"
If icell.Value = 0 Then Selection.Format.Fill.UserPicture "D:\1.gif"
If icell.Value = 1 Then Selection.Format.Fill.UserPicture "D:\2.gif"
If icell.Value = 2 Then Selection.Format.Fill.UserPicture "D:\3.gif"
Next
End Sub
Где
[C2:C102] - столбец с признаками маркера. Число элементов равно числу данных (Х или Y). Может как заполняться вручную, так и быть расчётным (см.рисунок ниже).
D:\1.gif ... D:\4.gif - пути к рисункам.
Аналогично производится заполнение рисунками нескольких графиков на диаграмме
Прореживаем
Sub Прореживание_маркеров()
' Активируем диаграмму
ActiveSheet.ChartObjects("Диаграмма 1").Activate
' Перебор по всем графикам диаграммы
For k = 1 To ActiveChart.FullSeriesCollection.Count
' Удаляем все маркеры на линии
For i = 1 To ActiveChart.SeriesCollection(k).Points.Count
ActiveChart.FullSeriesCollection(k).Points(i).Select
Selection.MarkerStyle = -4142
Next i
' Выставляем маркеры с требуемым шагом.
For i = 1 To ActiveChart.SeriesCollection(k).Points.Count Step 4
ActiveChart.FullSeriesCollection(k).Points(i).Select
With Selection
.MarkerStyle = 8
.MarkerSize = 15
End With
Next i
Next k
End Sub
Проставляем рисунки
Public Sub color_graph()
ActiveSheet.ChartObjects("Диаграмма 1").Activate
For k = 1 To ActiveChart.FullSeriesCollection.Count ' Перебор по всем графикам
For Each icell In [C2:C102]
ActiveChart.FullSeriesCollection(k).Points(icell.Row - 1).Select
Selection.MarkerStyle = -4147
Selection.Format.Fill.UserPicture "D:\4.gif"
If icell.Value = 0 Then Selection.Format.Fill.UserPicture "D:\1.gif"
If icell.Value = 1 Then Selection.Format.Fill.UserPicture "D:\2.gif"
If icell.Value = 2 Then Selection.Format.Fill.UserPicture "D:\3.gif"
Next
Next k
End Sub
Аналогично разным графикам одной диаграммы можно присвоить уникальные маркеры
Sub Markers()
ActiveSheet.ChartObjects("Диаграмма 1").Activate
For i = 1 To ActiveChart.FullSeriesCollection.Count ' Перебор по всем графикам
ActiveChart.FullSeriesCollection(i).Select
Selection.MarkerForegroundColorIndex = xlNone
Selection.MarkerStyle = -4147
If i = 1 Then Selection.Format.Fill.UserPicture "D:\1.gif"
If i = 2 Then Selection.Format.Fill.UserPicture "D:\2.gif"
If i = 3 Then Selection.Format.Fill.UserPicture "D:\3.gif"
If i = 4 Then Selection.Format.Fill.UserPicture "D:\4.gif"
If i = 5 Then Selection.Format.Fill.UserPicture "D:\5.gif"
Next i
End Sub
Ну или просто разными штатными маркерами разные графики. Но в автоматическом режиме - очень сокращает время подготовки документации. Полезно при подготовке к печати в чёрно-белом варианте.
Sub Установка_разных_маркеров()
ActiveSheet.ChartObjects("Диаграмма 1").Activate
For i = 1 To ActiveChart.FullSeriesCollection.Count ' Перебор по всем графикам
ActiveChart.FullSeriesCollection(i).Select
Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 0) ' Цвета линий и маркера
Selection.Format.Line.Weight = 0.75 ' Установка толщины линии
Selection.MarkerStyle = i ' Установка типа маркера
Selection.MarkerSize = 4 ' Установка размера маркера
Selection.Format.Fill.ForeColor.RGB = RGB(255, 255, 255) ' Установка заливки маркера
Next i
End Sub
Можно ли это сделать без макросов? Несомненно. Долго и нудно кликать кнопочки.
Но как по мне - проще скопировать и немного поправить код простого макроса. А в остальном - ваш выбор.
Немного отвлечённый пост о защите своей работы.
Итак, общеизвестны способы закрытия информации в Excel, а именно:
1. Защита листа/книги
Выбираем разрешения/допуски, вводим пароль, сохраняем файл.
Дополнительно для каждой ячейки можно указать защищается ли она или нет. По умолчанию - защищается.
2. Защита кода
Точно так же вводим пароль (с повторением), ок, сохраняем.
Но все эти способы не более чем игрушки, и вскрываются совершенно не сложно при наличии некоторых минимальных навыков и особенно при сохранении в *.xlsm (файл с поддержкой макросов). Сохраняйте в *.xlsb (двоичный код), если хотите хоть немного защитить свою работу.
Впрочем защита листа, даже без задания пароля, очень полезная вещь позволяющая ограничить вероятность порчи документа. Например если оставить без защиты (доступными для редактирования) только ячейки с исходными данными, то сам расчёт шаловливыми ручками испорчен не будет. Довольно часто пользуюсь...
Каким же образом можно ещё затруднить использование вашей работы, кроме как не давать её?
Ну для начала надо определиться что защищаем. Если это просто текст, и вы его кому то отдали, то забудьте о защите - он общедоступен. Но документ Excel это, прежде всего расчёты. Своей масштабируемостью они и ценны - при изменении исходных данных пересчёт произойдёт автоматически.
Этим можно воспользоваться выполнив передачу результатов расчёта в виде статических таблиц. Да, можно распечатать/сохранить в pdf, или банальным Ctrl+А / Ctrl+C / Ctrl+V /только значения/. А можно просто воспользоваться простым макросом:
' Замена всех формул на листе в значения
Sub Form_2_Dan()
Dim a As Integer
' Запрашиваем подтверждение
a = MsgBox("Внимание!" & _
Chr(10) & "Вы точно хотите заменить все формулы на листе на значения?" & _
Chr(10) & "Это необратимо!", _
52, "Замена формул на значения.")
' Если OK, то замену производим
If a = 6 Then
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
End If
End Sub
Расположение макроса - модуль.
Макрос сохраняется в личный набор/надстройку и кнопка запуска выводится на панель.
Внимание! Действие макроса необратимо!
Можно сделать "триальным" расчёт разместив в модулях листов вот такого вида макрос.
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
If Date >= #10/6/2022# Then ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Application.ScreenUpdating = True
End Sub
Т.е. после 10.06.2022 все расчёты с листа исчезнут... А цифры останутся.
Можно заменить проверку на заполнение ячейки, например проверить что в определённой ячейке записан автор труда "Вася Пупкин". :) При смене которого всё превратится в набор цифр..
Естественно доступ к макросам должен быть закрыт/запаролен.
Ещё вариант - ввод пароля на саму книгу:
Private Sub Workbook_Open()
Dim i&, n&, P As Variant
Application.ScreenUpdating = False
n = 2
If Date >= #1/2/2022# Then
For i = 1 To Sheets.Count
Sheets(i).Activate
Sheets(i).Protect "1234"
Next
1:
P = InputBox("Время использования книги истекло, для продолжения введите пароль", "ВВОД ПАРОЛЯ")
If P = "°0176" Then
For i = 1 To Sheets.Count
Sheets(i).Activate
Sheets(i).Unprotect "1234"
Next
Else
If n = 0 Then
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
Else
MsgBox "Пароль не верный, у вас еще " & n & " попытки"
n = n - 1
End If
GoTo 1
End If
End If
Application.ScreenUpdating = True
End Sub
Расположение макроса - "Эта книга".
#1/2/2022# - дата с которой будет запрашиваться пароль
"°0176" – правильный пароль
И при открытии файл будет встречать весёлым окошком:
Естественно можно открыть файл без выполнения макросов, но если расчёт в экселе построен на использовании макросов, то цель достигнута - расчёт производиться не будет.
И да, это всё игрушки - серьёзные дяденьки с тётеньками при необходимости поломают сие поделия, и узнают как вы определяли дискриминант... (0_о). Даже если Вы применили обфускацию кода или перенос кода в dll.
Хотеть не вредно.
Ну вот, 10 лет в школе, 6 в институте, 4 в аспирантуре, более 15 лет полевой практики, начальник отдела паротурбинных установок центрального ремонтно–механического завода, и вот свершилось - доверили лопату, и выпустили на субботник :). Вообще полезное действие - позитивно поработали.
И да, с завтрашнего дня в отпуске. Планов - громадьё. Починить ОДА-102СВР, таки освоить "PowerQuery в Excel и PowerBi: сбор, объединение и преобразование данных" Г.Равив. А то купил и никак руки не дойдут сесть за неё. Ну и парочку постов на Пикабу, раз обещал.
"Позабыты хлопоты, остановлен бег, Вкалывают роботы, счастлив человек!"(с)ПЭ
В этом посте я хотел бы показать, что ничего сложного в создании макроса, который бы выполнял рутинную работу по созданию макросов нет.
Всё базируется на трёх китах:
1. Унификация.
2. Результатом действия макроса может являться текст;
3. В текстовых переменных можно использовать спец символы:
3.1. Знак возврата каретки. vbCr она же символ Chr(13);
3.2. Знак перевода строки. vbLf она же символ Chr(10);
3.3. Символ объёдинения &.
Ну а теперь пройдём все шаги вместе.
В прошлом посте я говорил про макрос расчёта на основании построения тренда.
====
' Апроксимация полиномом для всего массива исходных данных
' В подпрограмму передаются все заданные точки и апроксимация ведётся по всем точкам!
' Данные из листа Excel
Public Function polinomEx_all(xVal As Range, yVal As Range, x As Single, Optional stepen As Long = 2) As Variant
Dim i As Integer
' Проверка требования "число элементов массива на 1 больше чем степень полинома"
If xVal.Count < stepen + 1 Then
stepen = xVal.Count - 1
End If
polinomEx_all = 0#
Select Case stepen
Case 1 ' Уравнение а·х+b
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + (x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, xVal, True, True), 1, i)
Next i
Case 2 ' Уравнение а·х^2+b·x+c
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + _
(x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2)), True, True), 1, i)
Next i
Case 3 ' Уравнение а·х^3+b·x^2+c·x+d
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + _
(x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3)), True, True), 1, i)
Next i
Case 4 ' Уравнение а·х^4+b·x^3+c·x^2+d·x+e
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + _
(x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4)), True, True), 1, i)
Next i
Case 5 ' Уравнение а·х^5+b·x^4+c·x^3+d·x^2+e·x+f
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + _
(x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4, 5)), True, True), 1, i)
Next i
Case 6 ' Уравнение а·х^6+b·x^5+c·x^4+d·x^3+e·x^2+f·x+g
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + _
(x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4, 5, 6)), True, True), 1, i)
Next i
Case 7 ' Уравнение а·х^7+b·x^6+c·x^5+d·x^4+e·x^3+f·x^2+g·x+h
For i = 1 To stepen + 1
polinomEx_all = polinomEx_all + _
(x ^ (stepen + 1 - i)) * Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4, 5, 6, 7)), True, True), 1, i)
Next i
Case Else
End Select
End Function
====
Т.е.
WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4)), True, True)
полностью совпадает с
ЛИНЕЙН(Y; X{1;2;3;4}; True; True)
Ну а теперь просто заменим расчёт на составление текстовой переменной
=====
' Апроксимация полиномом для всего массива исходных данных
' В подпрограмму передаются все заданные точки и апроксимация ведётся по всем точкам!
' Данные из листа Excel
' Результат работы программы - текст (уравнение полинома)
Public Function polinomExStr(ByVal xVal As Range, ByVal yVal As Range, Optional stepen As Long = 2) As Variant
' Проверка требования "число элементов массива на 1 больше чем степень полинома"
Dim i As Integer
If xVal.Count < stepen + 1 Then
stepen = xVal.Count - 1
End If
polinomExStr = ""
Select Case stepen
Case 1 ' Уравнение а·x+c
For i = 1 To 2
polinomExStr = polinomExStr & " + X ^ " & (2 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1)), True, True), 1, i), "0.###E+")
Next i
Case 2 ' Уравнение а·х^2+b·x+c
For i = 1 To 3
polinomExStr = polinomExStr & " + X ^ " & (3 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2)), True, True), 1, i), "0.###E+")
Next i
Case 3 ' Уравнение а·х^3+b·x^2+c·x+d
For i = 1 To 4
polinomExStr = polinomExStr & " + X ^ " & (4 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3)), True, True), 1, i), "0.###E+")
Next i
Case 4 ' Уравнение а·х^4+b·x^3+c·x^2+d·x+e
For i = 1 To 5
polinomExStr = polinomExStr & " + X ^ " & (5 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4)), True, True), 1, i), "0.###E+")
Next i
Case 5 ' Уравнение а·х^5+b·x^4+c·x^3+d·x^2+e·x+f
For i = 1 To 6
polinomExStr = polinomExStr & " + X ^ " & (6 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4, 5)), True, True), 1, i), "0.###E+")
Next i
Case 6 ' Уравнение а·х^6+b·x^5+c·x^4+d·x^3+e·x^2+f·x+g
For i = 1 To 7
polinomExStr = polinomExStr & " + X ^ " & (7 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4, 5, 6)), True, True), 1, i), "0.###E+")
Next i
Case 7 ' Уравнение а·х^7+b·x^6+c·x^5+d·x^4+e·x^3+f·x^2+g·x+h
For i = 1 To 8
polinomExStr = polinomExStr & " + X ^ " & (8 - i) & " * " _
& Format(Application.Index(WorksheetFunction.LinEst(yVal, Application.Power(xVal, Array(1, 2, 3, 4, 5, 6, 7)), True, True), 1, i), "0.###E+")
Next i
Case Else
End Select
End Function
=====
Ну или немного в другом виде с учётом ряда особенностей и модификаций
=====
' Программа формирования текста макроса для функции одного уравнения
Public Function fun_macros_Y(xVal As Range, yVal As Range, PolyStep As Long, _
Optional Name_f As String = "Nomogramma", _
Optional Opisanie As String = " Уравнение ", _
Optional NameX As String = "Xisk") As Variant
Dim j As Long
Dim N As Long
Dim k As Long
Dim stepen As Long
Dim xn() As Double ' заявляем массив X
Dim yn() As Double ' заявляем массив Y
Dim c() As Double ' заявляем массив c - коэффециенты уравнения полинома
fun_macros_Y = "" & Chr(10) & "' " & Opisanie & Chr(10)
fun_macros_Y = fun_macros_Y & "Public Function " & Name_f & "(ByRef " & NameX & " As Single) As Variant" & Chr(10)
Dim Nna4 As Long 'Номер начала диапазона.
Dim Nkon As Long 'Номер конца диапазона.
Nna4 = 1
Nkon = xVal.Count
' Проверяем на соответствие число элементов участка степени полинома
If (Nkon - Nna4) < PolyStep Then
stepen = (Nkon - Nna4)
Else
stepen = PolyStep
End If
' Заполняем матрицы участка
ReDim xn(1 To (Nkon - Nna4 + 1), 1 To stepen)
ReDim yn(1 To (Nkon - Nna4 + 1), 1 To 1)
ReDim c(1 To stepen + 1) As Double
For j = 1 To (Nkon - Nna4 + 1)
xn(j, 1) = xVal.Rows(j + Nna4 - 1)
For N = 2 To stepen
xn(j, N) = xn(j, 1) ^ N
Next N
yn(j, 1) = yVal.Rows(j + Nna4 - 1)
Next j
' Делаем расчёт и вывод.
fun_macros_Y = fun_macros_Y & Name_f & " = "
For k = 1 To stepen + 1 Step 1
c(k) = Format(Application.Index(WorksheetFunction.LinEst(yn, xn, True, True), 1, k), "0.####E+")
If c(k) >= 0 And k > 1 Then
fun_macros_Y = fun_macros_Y & " + " & c(k)
Else
fun_macros_Y = fun_macros_Y & c(k)
End If
If (stepen + 1 - k) > 0 Then
fun_macros_Y = fun_macros_Y & " * " & NameX & " ^ " & (stepen + 1 - k) & " "
End If
Next k
fun_macros_Y = fun_macros_Y & Chr(10) & "End Function" & Chr(10)
End Function
=====
Макрос ждёт в качестве вводных данных:
xVal - столбец известных Х
yVal - столбец известных Y
PolyStep - желаемую степень уравнения. Если точек будет меньше чем требуется для степени - на уменьшится
Name_f - название получаемого макроса. Опционально. Если не задать будет Nomogramma
Opisanie - описание получаемого макроса. Опционально. Если не задать будет Уравнение
NameX - название/имя аргумента. Опционально. Если не задать будет Xisk
Вызов макроса:
=ПОДСТАВИТЬ(fun_macros_Y(X; Y; 3; "fun_пример"; "Пример создания макроса"; "Go");",";".")
=ПОДСТАВИТЬ( ;",";".") требуется для замены запятых на точки. Иначе будет казус - VBA в качестве разделителя целой и дробной части использует точку, а в текстом виде (по крайней мере в рус.экселе) разделитель запятая.
Обратите внимание, что
"fun_пример"; "Пример создания макроса"; "Go" - текстовые, т.е. заключаются в кавычки
"fun_пример"; "Go" - должны соответствовать требованиям к переменным. Т.е. не должны содержать пробелов, не должны совпадать с имеющимися переменными или названиями ячеек/диапазонов.
Результатом выполнения макроса будет (поставил 3-ю степень чтобы результат влез в окно поста):
"
' Пример создания простого макроса
Public Function fun_Wтф(ByRef Go As Single) As Variant
fun_Wтф = 0.00000056401 * Go ^ 3 -0.001952 * Go ^ 2 + 1.3842 * Go ^ 1 + 25.341
End Function
"
Останется скопировать данный текст в модуль VBA и удалить двойные кавычки в начале и конце текстовки.
Если есть желание повысить количество знаков коэффициентов - правим формат "0.####E+"
Для ускорения работы у меня собраны листы/шаблоны позволяющие не лезть в заполнение вызова макросов.
Вызов макроса для данного случая у меня выглядит так (в Е9):
=ПОДСТАВИТЬ(fun_macros_Y(B3:ДВССЫЛ("B"&E4);C3:ДВССЫЛ("C"&E4);M7;E7;G5;G7);",";".")
Как заполнены дополнительные столбцы А, D и ячейки Е4 и т.д. видно на скрине.
Столбец А - контроль верности снятия данных (по возрастанию Х).
Столбец D - подсчёт снятых точек.
В итоге выполнение/изготовление макроса для меня сводится в вставке исходных данных начиная с ячейки В3, и затем жёлтых полей ввода описания, ввода названия новой функции и аргумента, выбора степени. Т.е. занимает не более минуты.
Для наблюдательных - присутствующие в макросе Dim Nna4 As Long 'Номер начала диапазона.
Dim Nkon As Long 'Номер конца диапазона.
намекают на то, что после небольшой модификации данный макрос можно использовать для более сложных диаграмм. Но об этом позднее... Думаю что через неделю в лучшем случае.
Для продвинутых - да, можно обойтись без доп.столбцов А и D, да и E4 лишнее. И то и другое можно реализовать в макросе, но...но данный лист был так сформирован на основании удобства для меня - могу оперативно проверить правильность и полноту вставки исходных данных, отсутствие сбоев "снятия" точек с картинки при массовой оцифровке. И вообще - "работает? Стабильно? Без сбоев? Не трожь!" (с)Анекдот. Вам ничто не мешает сделать иначе.
=========
dixi
Краткий план:
Теория вкратце [ Часть 1. ]
Забираем данные с листа. [ Часть 2. ]
Апроксимация простых графиков полиномом средствами Excel [ Часть 3.]
Макрос по созданию макросов апроксимации простых графиков полиномом [ Часть 4.] Этот пост
Апроксимация графиков двух аргументов полиномом [ Часть 5.]
Кусочная интерполяция простых графиков [ Часть 6.]
Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.
Реклама АО «Кордиант», ИНН 7601001509