插入缺失的数据

Ara*_*ash 0 excel vba linear-interpolation

我在excel中有数据,我需要填充缺失(空白)数据,输入数据如下:

row1 --> 1   2      3   blank   5   6   blank  blank   9   10

row2 --> 2   4   blank  blank   10  12    14   blank   18  blank
Run Code Online (Sandbox Code Playgroud)

VBA代码必须读取每一行并填充它们,如:

row1 --> 1   2  3  4   5    6    7    8    9    10

row2 --> 2   4  6  8   10   12   14   16   18   20
Run Code Online (Sandbox Code Playgroud)

在VBA(excel)中有明确的解决方案吗?

Pᴇʜ*_*Pᴇʜ 8

以下是数学解决方案的示例:

  1. 生成x值 x(我们需要它们作为接下来的两个步骤的数组)
  2. 计算给定行值的斜率 m
  3. 计算给定行值的截距 c
  4. 插缺失值yy = 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
Run Code Online (Sandbox Code Playgroud)

所以假设这个源数据 在此输入图像描述

它像这样插值 在此输入图像描述

以下是第3行插值的可视化:

在此输入图像描述

那么我们通过给定的点(蓝色)计算线性方程式并用它来计算缺失点(橙色).


这甚至适用于非线性原点(蓝色),如下例所示. 在此输入图像描述

在此输入图像描述

  • 优雅,优雅......再加上一个 (2认同)