Rellene los espacios de una columna con series lineales para toda la columna.

0

Tengo una columna de datos que contiene espacios al azar en toda su longitud, la cantidad de espacios agrupados también es aleatoria. p.ej.

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

En una situación normal con una pequeña cantidad de filas, el enfoque sería comenzar en la parte superior del grupo y resaltar manualmente cada rango de espacio junto con los dos valores arriba y abajo, luego aplicar una serie de tendencia lineal para completar cada celda vacía.

El problema es que tengo hasta 20000 filas para procesar, por lo que no puedo abordarlas manualmente.

¿Es posible aplicar de alguna manera la serie de relleno automático solo a los espacios de la columna completa?

Sandie
fuente
Yo diría que esto es trivial-ish hacer con los scripts, pero probablemente no sea posible en Excel de vainilla. ¿Has considerado escribir una pequeña macro de VBA para hacer lo que quieres?
eirikdaude

Respuestas:

0

Con datos como este:

enter image description here

Primero haga clic en cualquier celda de la columna que desee procesar y ejecute esta macro:

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

Para producir:

enter image description here

Gary's Student
fuente
Aunque he estado trabajando en mi propia solución y realmente disfruté el proceso de resolución de problemas, es muy gracioso lo elegante que es tu solución en comparación con la mía.
Sandie
Aunque he estado trabajando en mi propia solución y realmente disfruté el proceso de resolución de problemas, es muy gracioso lo elegante que es tu solución en comparación con la mía. Mi solución usa ocho columnas adicionales llenas de sentencias If anidadas para identificar, filtrar, calcular, combinar y almacenar antes de usar una Macro muy básica para mover la columna y llenar cada celda vacía. Mi cerebro obviamente está funcionando de una manera muy lineal. Gracias por su respuesta, espero entender su rastro de pensamiento.
Sandie