Макрос интерполяция для excel

Никонов Павел

размещено: 24 Мая 2009

Данная программа использует макросы Excel и позволяет находить в любой таблице интерполированное значение. Для получения результата нужно:
1) Создать лист Excel и скопировать в него первые семь строк. Эти строки НЕЛЬЗЯ ставить в какой либо иной диапазон кроме A1:D7! После копирования лучше использовать «Сохранить ширину столбцов оригинала»
2) Создайте или проще скопируйте (!) любую таблицу ниже по строкам диапазона A1:D7.
3) В строке «По горизонтали» задайте диапазон горизонтальных значений по которым будет производиться ваша интерполяция, а в строке «по вертикали» — диапазон вертикальных значений.
4) В строке «область данных» задайте область данных. Программа самостоятельно проверит соответствие количества строк и столбцов в области данных количеству столбцов в строке «по горизонтали» и количеству строк в строке «по вертикали»
5) Введите в ячейку D5 величину находящуюся между значениями диапазона «по горизонтали», а в ячейку D6 — диапазона «по вертикали».
6) Вычисленный результат определится в строке D7.

Далее лист с таблицей можно сохранить и использовать позднее. При использовании программы не забудьте отключить защиту от макросов.

zip

0.02 МБ

СКАЧАТЬ

Составление макроса для двумерной интерполяции

Khorr

Дата: Пятница, 24.01.2014, 13:46 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день. Возникла проблема при инженерном расчете в автоматизации процесса двумерной интерполяции. Макросами до этого не занимался:(
Есть функция для линейной интерполяции (нашел на форуме), которую думаю можно немного подправить:
[vba]

Код

Function Interp(a As Range, Arng As Range, Krng As Range) As Single
Dim al, ks, i As Integer
al = Arng.Value: ks = Krng.Value
Do
i = i + 1
Loop While al(i, 1) < a.Value
‘If i = 1 Then Exit Function
If al(i, 1) = a.Value Then
Interp = ks(i, 1)
Else
Interp = (ks(i, 1) — ks(i — 1, 1)) / (al(i, 1) — al(i — 1, 1)) * _
(a.Value — al(i — 1, 1)) + ks(i — 1, 1)
End If
End Function

[/vba]
Необходимо найти значение из таблицы при изменяющихся a и b (таблицу приложил).
Заранее всех благодарю.

Сообщение отредактировал KhorrПятница, 24.01.2014, 14:10

 

Ответить

doober

Дата: Суббота, 25.01.2014, 17:11 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 913


Репутация:

317

±

Замечаний:
0% ±


Excel 2010

Жмите иконку,проверяйте правильность расчета.
Достал из загашника. :'(
Все необходимые диапазоны поименованы.

К сообщению приложен файл:

0604202.xlsm
(33.0 Kb)


Сообщение отредактировал dooberСуббота, 25.01.2014, 17:14

 

Ответить

Khorr

Дата: Вторник, 28.01.2014, 07:20 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Благодарю, Вы очень помогли.

 

Ответить

AlexM

Дата: Вторник, 28.01.2014, 08:28 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

Замечаний:
0% ±


Excel 2003

Похожая тема Интерполяция и поиск третьего значения по двум известным
Решение функцией пользователя
Код
[vba]

Код

Function Interp(P1 As Single, P2 As Single) As Double
Dim Arr
Dim i As Long, j As Long
Dim Z1 As Double, Z2 As Double
Arr = Range(«A2:F6»)
For i = 2 To 6
If P2 <= Arr(1, i) Then Exit For
Next i
For j = 2 To 6
If P1 <= Arr(j, 1) Then Exit For
Next j
Z1 = Arr(j — 1, i — 1) + (Arr(j — 1, i) — Arr(j — 1, i — 1)) * (P2 — Arr(1, i — 1)) / (Arr(1, i) — Arr(1, i — 1))
Z2 = Arr(j, i — 1) + (Arr(j, i) — Arr(j, i — 1)) * (P2 — Arr(1, i — 1)) / (Arr(1, i) — Arr(1, i — 1))
Interp = Z1 + (Z2 — Z1) * (P1 — Arr(j — 1, 1)) / (Arr(j, 1) — Arr(j — 1, 1))
End Function

[/vba]
Использован файл Сергея (doober).

К сообщению приложен файл:

Interp.xls
(21.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

Khorr

Дата: Вторник, 28.01.2014, 08:45 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 13


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Решение функцией пользователя

Спасибо, так даже макрос каждый раз запускать не надо при изменении параметров.

 

Ответить

Doctor_Che

Дата: Четверг, 17.12.2015, 13:21 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

А как сделать тоже самое, только что бы таблица находилась на другом листе?
Например формула находится на Листе 1, а таблица на Листе 2.

 

Ответить

Linear interpolation is used for fitting curves using linear polynomials. Linear Interpolation is a method that constructs new data points from a given set of data points. Linear interpolation is useful when looking for a value between two data points. It can be considered as “filling in the gaps” in a table of data. The strategy for linear interpolation is to use a straight line to connect the known data points on either side of the unknown point. It finds the unknown values in the table. The formula of linear interpolation is given by,

Linear Interpolation Formula

y = y_1 + (x-x_1)frac{y_2-y_1}{x_2-x_1}

Where,

  • x1 and y1  are the first coordinates, and
  • x2 and y2 are the second coordinates
  • x is the point to perform the interpolation
  • y is the interpolated value

Linear Interpolation in Excel

We’ll be looking at two ways to calculate the Linear Interpolation in Excel.

Case 1: When we have 2 pairs of values for the x and y coordinates. For Example:

linear-interpolation-example

We want to check the value of 2.3 and hence we have to use interpolation. We are using linear interpolation because the values of x and y are changing linearly. We’ll be using the FORECAST formula,

=FORECAST(x, known_y’s, known_x’s)

Note: In Excel 2016, the FORECAST function was replaced with FORECAST.LINEAR. The syntax and usage of the two functions are the same.

Step 1: Add the FORECAST.LINEAR formula to the cell where you want to add the interpolated value.

forecast-linear-function

Step 2: Fill the formula with the desired values. First, the value of x will go, then add the y-axis values and finally add x-axis values in the formula and click Enter. You’ll get the desired result.

forecast-output

Here the interpolated value of 2.3 is 5.6

Case 2: When we have more than 2 pairs of values for the x and y coordinates.

For Example, We have the data of rainfall (in cm) received in some parts of India for consecutive 7 days. We want to predict rainfall at 1.5 days.

data-for-rainfall

First, we need to check x1, x2, y1, and y2. To perform this we will be using VLOOKUP, INDEX, and MATCH

VLOOKUP: It is used when you need to find things in a table or a range by row.

Syntax:

=VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup])

range_lookup: It is an optional parameter. We can enter 1/True, which looks for an approximate match while 0/False, which looks for an exact match.

INDEX: It is used when you need a value or reference to a value from within a table or range.

Syntax:

= INDEX(array, row_num, [column_num])

Where array and row_num are required values and column_num is optional.

MATCH: This function searches for a specified item in a range of cells, and then returns the relative position of that item in the range.

Syntax:

= MATCH(lookup_value, lookup_array, [match_type])

Where lookup_value and lookup_array are required values and match_type is optional.

We will be calculating all the other values using the formulas above.

Step 1: Calculating x1 using VLOOKUP. Enter the formula and values as shown below.

vlookup-example

Step 2: Press Enter and you’ll get the desired value (as shown below).

vlookup-result

Step 3: Calculating y1 using VLOOKUP. Enter the formula and values as shown below. The only change we need to do here is the change in col_index_num to 2 because we want the values from column C.

vlookup-example

Step 4: Press Enter and you’ll get the desired value (as shown below).

vlookup-result

To calculate the values of x2 and y2, we’ll be using INDEX and MATCH functions.

Step 5: Calculate x2 using INDEX and MATCH functions. Enter the formula and values as shown below.

index-match-formula

Step 6: Press Enter and you’ll get the desired value (as shown below).

index-match-result

Step 7: Calculate y2 using INDEX and MATCH functions. Enter the formula =INDEX($C$2:$C$8, MATCH(F6,$C$2:$C$8)+1) and values as shown below. The only change here is of Column C and the value of y1.

index-match-formula

Step 8: Press Enter and you’ll get the desired value (as shown below).

index-match-result

Now, we’ll be using the above-mentioned formula to calculate the y value.

Step 9: Put all the calculated values in the formula in the desired cell. (as shown below)

calculate-interpolated-value

Step 10: Press Enter and you’ll get the desired results.

linear-interpolation-result

Содержание

  • Использование интерполяции
  • Способ 1: интерполяция для табличных данных
  • Способ 2: интерполяция графика с помощью его настроек
  • Способ 3: интерполяция графика с помощью функции
  • Вопросы и ответы

Интерполяция в Microsoft Excel

Бывает ситуация, когда в массиве известных значений нужно найти промежуточные результаты. В математике это называется интерполяцией. В Excel данный метод можно применять как для табличных данных, так и для построения графиков. Разберем каждый из этих способов.

Использование интерполяции

Главное условие, при котором можно применять интерполяцию – это то, что искомое значение должно быть внутри массива данных, а не выходить за его предел. Например, если мы имеем набор аргументов 15, 21 и 29, то при нахождении функции для аргумента 25 мы можем использовать интерполяцию. А для поиска соответствующего значения для аргумента 30 – уже нет. В этом и является главное отличие этой процедуры от экстраполяции.

Способ 1: интерполяция для табличных данных

Прежде всего, рассмотрим применения интерполяции для данных, которые расположены в таблице. Для примера возьмем массив аргументов и соответствующих им значений функции, соотношение которых можно описать линейным уравнением. Эти данные размещены в таблице ниже. Нам нужно найти соответствующую функцию для аргумента 28. Сделать это проще всего с помощью оператора ПРЕДСКАЗ.

В таблице нет значения функции в Microsoft Excel

  1. Выделяем любую пустую ячейку на листе, куда пользователь планирует выводить результат от проведенных действий. Далее следует щелкнуть по кнопке «Вставить функцию», которая размещена слева от строки формул.
  2. Переход в Мастер функций в Microsoft Excel

  3. Активируется окошко Мастера функций. В категории «Математические» или «Полный алфавитный перечень» ищем наименование «ПРЕДСКАЗ». После того, как соответствующее значение найдено, выделяем его и щелкаем по кнопке «OK».
  4. Переход к аргументам функции ПРЕДСКАЗ в Microsoft Excel

  5. Запускается окно аргументов функции ПРЕДСКАЗ. В нем имеется три поля:
    • X;
    • Известные значения y;
    • Известные значения x.

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

    В поле «Известные значения y» нужно указать координаты диапазона таблицы, в котором содержатся значения функции. Это можно сделать вручную, но гораздо проще и удобнее установить курсор в поле и выделить соответствующую область на листе.

    Аналогичным образом устанавливаем в поле «Известные значения x» координаты диапазона с аргументами.

    После того, как все нужные данные введены, жмем на кнопку «OK».

  6. Аргументы функции ПРЕДСКАЗ в Microsoft Excel

  7. Искомое значение функции будет отображено в той ячейке, которую мы выделили ещё в первом шаге данного способа. В результате получилось число 176. Именно оно и будет итогом проведения процедуры интерполяции.

Результат вычисления функции ПРЕДСКАЗ в Microsoft Excel

Урок: Мастер функций в Экселе

Способ 2: интерполяция графика с помощью его настроек

Процедуру интерполяции можно применять и при построении графиков функции. Актуальна она в том случае, если в таблице, на основе которой построен график, к одному из аргументов не указано соответствующее значение функции, как на изображении ниже.

  1. Выполняем построение графика обычным методом. То есть, находясь во вкладке «Вставка», выделяем табличный диапазон, на основе которого будет проводиться построение. Щелкаем по значку «График», размещенному в блоке инструментов «Диаграммы». Из появившегося списка графиков выбираем тот, который считаем более уместным в данной ситуации.
  2. Переход к построению графика в Microsoft Excel

    Lumpics.ru

  3. Как видим, график построен, но не совсем в таком виде, как нам нужно. Во-первых, он разорван, так как для одного аргумента не нашлась соответствующая функция. Во вторых, на нем присутствует дополнительная линия X, которая в данном случае не нужна, а также на горизонтальной оси указаны просто пункты по порядку, а не значения аргумента. Попробуем исправить все это.

    Для начала выделяем сплошную синюю линию, которую нужно удалить и жмем на кнопку Delete на клавиатуре.

  4. Удаление линии в Microsoft Excel

  5. Выделяем всю плоскость, на которой размещен график. В появившемся контекстном меню щелкаем по кнопке «Выбрать данные…».
  6. Переход к выбору данных в Microsoft Excel

  7. Запускается окно выбора источника данных. В правом блоке «Подписи горизонтальной оси» жмем на кнопку «Изменить».
  8. Окно выбора источника данных в Microsoft Excel

  9. Открывается небольшое окошко, где нужно указать координаты диапазона, значения из которого будут отображаться на шкале горизонтальной оси. Устанавливаем курсор в поле «Диапазон подписей осей» и просто выделяем соответствующую область на листе, в которой содержаться аргументы функции. Жмем на кнопку «OK».
  10. Изменение шкалы оси в Microsoft Excel

  11. Теперь нам осталось выполнить основную задачу: с помощью интерполяции устранить разрыв. Вернувшись в окно выбора диапазона данных жмем на кнопку «Скрытые и пустые ячейки», расположенную в нижнем левом углу.
  12. Переход к скрытым и пустым ячейкам в Microsoft Excel

  13. Открывается окно настройки скрытых и пустых ячеек. В параметре «Показывать пустые ячейки» выставляем переключатель в позицию «Линию». Жмем на кнопку «OK».
  14. Настройка скрытых и пустых ячеек в Microsoft Excel

  15. После возвращения в окно выбора источника подтверждаем все сделанные изменения, щелкнув по кнопке «OK».

Подтверждение изменений в Microsoft Excel

Как видим, график скорректирован, а разрыв с помощью интерполяции удален.

График скорректирован в Microsoft Excel

Урок: Как построить график в Excel

Произвести интерполяцию графика можно также с помощью специальной функции НД. Она возвращает неопределенные значения в указанную ячейку.

  1. После того, как график построен и отредактирован, так как вам нужно, включая правильную расстановку подписи шкалы, остается только ликвидировать разрыв. Выделяем пустую ячейку в таблице, из которой подтягиваются данные. Жмем на уже знакомый нам значок «Вставить функцию».
  2. Перемещение в Мастер функций в программе Microsoft Excel

  3. Открывается Мастер функций. В категории «Проверка свойств и значений» или «Полный алфавитный перечень» находим и выделяем запись «НД». Жмем на кнопку «OK».
  4. Мастер функций в Microsoft Excel

  5. У данной функции нет аргумента, о чем и сообщает появившееся информационное окошко. Чтобы закрыть его просто жмем на кнопку «OK».
  6. Информационное окно в Microsoft Excel

  7. После этого действия в выбранной ячейке появилось значение ошибки «#Н/Д», но зато, как можно наблюдать, обрыв графика был автоматически устранен.

Результат обработки функцией НД в Microsoft Excel

Можно сделать даже проще, не запуская Мастер функций, а просто с клавиатуры вбить в пустую ячейку значение «#Н/Д» без кавычек. Но это уже зависит от того, как какому пользователю удобнее.

НД вставлена как значение в Microsoft Excel

Как видим, в программе Эксель можно выполнить интерполяцию, как табличных данных, используя функцию ПРЕДСКАЗ, так и графика. В последнем случае это осуществимо с помощью настроек графика или применения функции НД, вызывающей ошибку «#Н/Д». Выбор того, какой именно метод использовать, зависит от постановки задачи, а также от личных предпочтений пользователя.

Еще статьи по данной теме:

Помогла ли Вам статья?

Аппроксимация и интерполяция – не одно и то же, они совпадают только, если заданы всего две точки. Интерполяция предполагает обязательное прохождение через все заданные точки, а к аппроксимации такое требование не предъявляется.  

  В данном случае речь идет о кусочно-линейной интерполяция и экстраполяция данных. При этом экстраполяция осуществляется по уравнению прямой двух конечных точек: 1-й и 2-й при X <= Xmin, последней и предпоследней – для X >= Xmax  

  Вот код, не зависящий от горизонтальности или вертикальности диапазонов RngX и RngY:  

  Function Y(RngX As Range, RngY As Range, X As Double) As Double  

   Dim i&, xmin#, xmax#, x1#, x2#, y1#, y2#, v  

   i = RngX.Count  
 xmin = RngX(1)  
 xmax = RngX(i)  

   If X <= xmin Then  

       x1 = RngX(2)  
   x2 = xmin  
   y1 = RngY(2)  
   y2 = RngY(1)  

   ElseIf X >= xmax Then  

       x1 = RngX(i — 1)  
   x2 = xmax  
   y1 = RngY(i — 1)  
   y2 = RngY(i)  

   Else  

         i = 0  
   For Each v In RngX.Value  
     i = i + 1  
     If X < v Then Exit For  
   Next  
   x1 = RngX(i — 1)  
   x2 = v  
   y1 = RngY(i — 1)  
   y2 = RngY(i)  

   End If  

   Y = y1 + (X — x1) * (y2 — y1) / (x2 — x1)  

  End Function  

    Sub Test()  
 ‘ Аналогично формуле ячейки: =Y(C8:E8;C12:E12;I8)  
 Debug.Print Y(Range(«C8:E8»), Range(«C12:E12»), [I8])
End Sub

Понравилась статья? Поделить с друзьями:
  • Макрос копирование ячеек с листа на лист в excel
  • Макрос или надстройка excel
  • Макрос копирование строки с листа на лист в excel
  • Макрос изменения цвета ячейки в excel при
  • Макрос копирование строк с листа на лист в excel