插入缺失数据
Interpolate missing Data
我在 excel 中有数据,我需要填充缺失(空白)数据,输入数据如下:
row1 --> 1 2 3 blank 5 6 blank blank 9 10
row2 --> 2 4 blank blank 10 12 14 blank 18 blank
VBA 代码必须读取每一行并像这样填充它们:
row1 --> 1 2 3 4 5 6 7 8 9 10
row2 --> 2 4 6 8 10 12 14 16 18 20
在 VBA(excel) 中是否有明确的解决方案?
这是数学解决方案的示例:
- 生成 x 值
x
(我们需要它们作为接下来两步的数组)
- 计算给定行值的斜率
m
- 计算给定行值的截距
c
- 用
y = m * x + c
插入缺失值 y
示例:
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 行插值的可视化:
那么我们通过给定点(蓝色)计算线性方程并用它来计算缺失点(橙色)。
这甚至适用于非线性原始点(蓝色),如下例所示。
我在 excel 中有数据,我需要填充缺失(空白)数据,输入数据如下:
row1 --> 1 2 3 blank 5 6 blank blank 9 10
row2 --> 2 4 blank blank 10 12 14 blank 18 blank
VBA 代码必须读取每一行并像这样填充它们:
row1 --> 1 2 3 4 5 6 7 8 9 10
row2 --> 2 4 6 8 10 12 14 16 18 20
在 VBA(excel) 中是否有明确的解决方案?
这是数学解决方案的示例:
- 生成 x 值
x
(我们需要它们作为接下来两步的数组) - 计算给定行值的斜率
m
- 计算给定行值的截距
c
- 用
y = m * x + c
插入缺失值
y
示例:
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 行插值的可视化:
那么我们通过给定点(蓝色)计算线性方程并用它来计算缺失点(橙色)。
这甚至适用于非线性原始点(蓝色),如下例所示。