Я создаю функцию линейной интерполяции в VBA.Вот как это выглядит:
Function INTERP(X0 As Variant, ByVal X As Range, ByVal Y As Range) As Variant
Dim i As Long
Dim N As Long
Dim X1 As Double
Dim X2 As Double
Dim Y1 As Double
Dim Y2 As Double
N = X.Rows.Count
If X0 <= Application.Min(X) Then
X2 = X.Cells(2, 1)
Y2 = Y.Cells(2, 1)
X1 = X.Cells(1, 1)
Y1 = Y.Cells(1, 1)
ElseIf X0 >= Application.Max(X) Then
X2 = X.Cells(N, 1)
Y2 = Y.Cells(N, 1)
X1 = X.Cells(N - 1, 1)
Y1 = Y.Cells(N - 1, 1)
Else
For i = 1 To N - 1
If X0 >= X.Cells(1, 1) And X0 < X.Cells(i + 1, 1) Then
X2 = X.Cells(i + 1, 1)
Y2 = Y.Cells(i + 1, 1)
X1 = X.Cells(i, 1)
Y1 = Y.Cells(i, 1)
Exit For
End If
Next i
End If
INTERP = Y1 + (Y2 - Y1) / (X2 - X1) * (X0 - X1)
End Function
Чтобы выполнить интерполяцию, диапазон X
должен быть отсортирован в порядке возрастания.Большинство других ответов, касающихся сортировки в Excel VBA, которые я видел, имеют дело с какой-то сортировкой, которая возвращает и сортирует данные на листе.
В этом случае Я неЯ хочу изменить данные на листе , но мне нужно отсортировать X
в порядке возрастания, а затем отсортировать Y
на основе X
, чтобы сохранить связь между ними.Как я могу сделать это с VBA?