Заповніть пробіли стовпця лінійними рядами для цілого стовпця


0

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

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 рядків для обробки, тому не можу підійти до цього вручну.

Чи можливо якось застосувати автозаповнення серій лише до пробілів усієї колонки?


Я б сказав, що це банально пов'язане із написанням сценаріїв, але, мабуть, це неможливо у ванільному Excel. Чи думали ви написати невеликий макрос VBA, щоб робити те, що ви хочете?
eirikdaude

Відповіді:


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

Виробляти:

введіть тут опис зображення


Я працював над власним рішенням і мені дуже сподобався процес вирішення проблем. Це дивно, наскільки елегантне ваше рішення порівняно з моїм.
Сенді

Я працював над власним рішенням і мені дуже сподобався процес вирішення проблем. Це дивно, наскільки елегантне ваше рішення порівняно з моїм. У моєму рішенні використовуються додаткові вісім стовпців, заповнених вкладеними. Якщо оператори визначають, фільтрують, обчислюють, комбінують та зберігають, перш ніж я використовую дуже основний макрос для переміщення вниз по стовпцю, заповнюючи кожну порожню клітинку. Мій мозок, очевидно, працює дуже лінійно. Дякую за вашу відповідь, я з нетерпінням чекаю розуміння вашого сліду думки.
Сенді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.