我创建的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做到这一点?
保存X
和Y
为表(它甚至可能是无格式的表格)。然后,只需排序表,该表的其余部分将保持不变。