Интерполировать недостающие данные - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть данные в 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)?

1 Ответ

0 голосов
/ 30 ноября 2018

Вот пример для математического решения:

  1. Генерация значений x x (они нужны нам как массив для следующих 2 шагов)
  2. Рассчитать Наклон m для заданных значений строки
  3. Рассчитать Перехват c для заданных значений строки
  4. Интерполироватьпропущенные значения 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

Таким образом, предполагая, что эти исходные данные enter image description here

Этоинтерполирует вот так enter image description here

Ниже приведена визуализация интерполяции строки 3:

enter image description here

Итак, что происходит, мы вычисляем линейное уравнение по заданным точкам (синим цветом) и используем его для вычисления недостающей точки (оранжевого цвета).


Это будет работать даже для исходных нелинейных точек (синего цвета)как в следующем примере.enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...