Preencha espaços de uma coluna com séries lineares para coluna inteira

0

Eu tenho uma coluna de dados que contém espaços aleatoriamente em toda a extensão, a quantidade de espaços agrupados também é aleatória. por exemplo,

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

Em uma situação normal com uma pequena quantidade de linhas, a abordagem seria começar na parte superior do grupo e destacar manualmente cada intervalo de espaço junto com os dois valores acima e abaixo e aplicar uma série de tendências lineares para preencher cada célula.

O problema é que tenho até 20000 linhas para processar, por isso não posso abordá-lo manualmente.

É possível, de alguma forma, aplicar o autopreenchimento de série apenas aos espaços de toda a coluna?

    
por Sandie 03.03.2016 / 11:40

1 resposta

0

Com dados como este:

Primeiro,cliqueemqualquercéluladacolunaquevocêdesejaprocessareexecuteessamacro:

SubFillInTheBlanks()DimiColAsLong,LastAsLong,iAsLongDimiBlankAsLong,BlankModeAsBooleanDimDelta,jAsLong,i1AsLongiCol=ActiveCell.ColumnLast=Cells(Rows.Count,iCol).End(xlUp).RowiBlank=0BlankMode=FalseFori=1ToLastIfBlankModeThenIfCells(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

Para produzir:

    
por 03.03.2016 / 23:53