Вот пример для математического решения:
- Генерация значений x
x
(они нужны нам как массив для следующих 2 шагов) - Рассчитать Наклон
m
для заданных значений строки - Рассчитать Перехват
c
для заданных значений строки - Интерполироватьпропущенные значения
y
с y = m * x + c
Пример:
Option Explicit
Public Sub LinearInterpolateRowWise()
Dim DataRange As Range
Set DataRange = Worksheets("Sheet1").Range("A1:J3")
Dim ArrX As Variant 'create an array of x-values
ReDim ArrX(1 To 1, 1 To DataRange.Columns.Count)
Dim c As Long
For c = 1 To DataRange.Columns.Count
ArrX(1, c) = c
Next c
Dim iRow As Long, iCol As Long
For iRow = 1 To DataRange.Rows.Count 'loop row wise
Dim Slope As Double
Slope = Application.WorksheetFunction.Slope(DataRange.Rows(iRow), ArrX)
Dim Intercept As Double
Intercept = Application.WorksheetFunction.Intercept(DataRange.Rows(iRow), ArrX)
For iCol = 1 To DataRange.Columns.Count 'interpolate missing values
If DataRange.Cells(iRow, iCol) = vbNullString Then
DataRange.Cells(iRow, iCol) = Slope * iCol + Intercept 'y = m * x + c
End If
Next iCol
Next iRow
End Sub
Таким образом, предполагая, что эти исходные данные
Этоинтерполирует вот так
Ниже приведена визуализация интерполяции строки 3:
Итак, что происходит, мы вычисляем линейное уравнение по заданным точкам (синим цветом) и используем его для вычисления недостающей точки (оранжевого цвета).
Это будет работать даже для исходных нелинейных точек (синего цвета)как в следующем примере.