У меня есть столбец данных, который содержит пробелы случайным образом по всей его длине, количество пробелов, сгруппированных вместе, также является случайным. например

1                                 1
Space                          1.25
Space                           1.5
Space                          1.75
2                                 2
3                                 3
4                                 4
5                                 5
6                                 6
Space                   6.333333333
Space                   6.666666667
7       Changes to -->            7
8                                 8
9                                 9
Space                           9.5
10                               10
11                               11
12                               12
Space                          12.5
13                               13
Space                   13.33333333
Space                   13.66666667
Space                            14
Space                   14.33333333
Space                   14.66666667
15                               15

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

Проблема в том, что мне нужно обработать до 20000 строк, поэтому я не могу подойти к нему вручную.

Можно ли как-то применить автозаполнение ряда только к пробелам всего столбца?

1 ответ1

0

С такими данными:

Сначала щелкните по любой ячейке в столбце, который вы хотите обработать, и запустите этот макрос:

Sub FillInTheBlanks()
    Dim iCol As Long, Last As Long, i As Long
    Dim iBlank As Long, BlankMode As Boolean
    Dim Delta, j As Long, i1 As Long

    iCol = ActiveCell.Column
    Last = Cells(Rows.Count, iCol).End(xlUp).Row
    iBlank = 0
    BlankMode = False

    For i = 1 To Last
        If BlankMode Then
            If Cells(i, iCol) = "" Then
                iBlank = iBlank + 1
            Else
                Delta = (Cells(i, iCol).Value - v1) / (iBlank + 1)
                For j = i1 To i - 1
                    Cells(j, iCol).Value = Cells(j - 1, iCol).Value + Delta
                Next j
                BlankMode = False
            End If
        Else
            If Cells(i, iCol) = "" Then
                v1 = Cells(i - 1, iCol).Value
                iBlank = 1
                i1 = i
                BlankMode = True
            End If
        End If
    Next i
End Sub

Производить:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .