Autocompletar según celda anterior

Hola buenas tardes, quisiera volver a hacer una consulta.
En mi hoja de contabilidad con asientos y demás tengo que rellenar unas celdas con el numero de asiento y fecha que aparece en cada asiento como cabecera. Mejor pongo el ejemplo:
Así es como lo tengo:
col b c d
                      1183                      08/04/2010
40000030    
57200002    
57200001    
57200000      
                          1184                      08/04/2010
57200005    
57001201      
                          1185                         08/04/2010
57200002    
57201201    
57201202    
                          1186                     08/04/2010
57201401    
57001201    
57201401    
62601401    
asi es como tengo que completarlo:
col b                    c                                 d
                      1183                      08/04/2010
40000030     1183                      08/04/2010
57200002     1183                      08/04/2010
57200001     1183                      08/04/2010
57200000      1183                      08/04/2010 
                      1184                      08/04/2010
57200005      1184                      08/04/2010
57001201      1184                      08/04/2010
                      1185                         08/04/2010
57200002    1185                         08/04/2010
57201201    1185                         08/04/2010
57201202    1185                         08/04/2010
                      1186                     08/04/2010
57201401         1186                     08/04/2010
57001201         1186                     08/04/2010
57201401         1186                     08/04/2010
62601401         1186                     08/04/2010
Espero haberme explicado con claridad y podáis ayudarme
Un saludo

1 respuesta

Respuesta
1
En este caso te plantearía usar una macro. El código podría ser este:
Option Explicit
Sub rellenaAsientoFechaEnBlanco()
    Dim nLin As Integer
    Dim antAsiento As Long
    Dim antFecha As Date
    Dim aux1 As Variant
    Dim aux2 As Variant
    aux1 = ""
    aux2 = ""
    nLin = 1
    ' Repetimos mientras haya datos
    Do While Cells(nLin, 2) <> "" Or Cells(nLin, 3) <> "" Or Cells(nLin, 4) <> ""
        ' Leemos los datos de las columnas 3 y 4 (C y D)
        aux1 = Cells(nLin, 3)
        aux2 = Cells(nLin, 4)
        If aux1 <> "" And aux2 <> "" And IsNumeric(aux1) And IsDate(aux2) Then
            ' Tenemos un número de asiento/fecha nuevos
            antAsiento = aux1
            antFecha = aux2
        End If
        If aux1 = "" And aux2 = "" Then ' Está sin poner el asiento y la fecha... los ponemos
            Cells(nLin, 3) = antAsiento
            Cells(nLin, 4) = antFecha
        End If
        nLin = nLin + 1
    Loop
    MsgBox "Ya está"
End Sub
No me ha funcionado, ¿te puedo enviar la hoja de excel para que lo compruebes mejor?
Envíala a [email protected] y espero poder mirarla esta tarde. Ponme algo en el correo para que reconozca que es tuyo.
Por cierto, la he probado y a mi si me ha funcionado. Ten en cuenta que es una macro y tienes que ejecutarla tu (con <Alt><F8> o entrando por el menú de herramientas-macros), no es como la función de antes que se calcula sola.
Si quieres manda la hoja de cálculo y la echo un vistazo
Ya he visto la hoja de cálculo. Usa este código:
Option Explicit
Sub rellenaAsientoFechaEnBlanco()
    Dim n As Integer
    Dim antAsiento As Long
    Dim antFecha As Date
    Dim auxD As Variant
    Dim auxE As Variant
    auxD = ""
    auxE = ""
    n = 1
    ' Repetimos mientras haya datos (hasta que encontremos 4 filas seguidas con las celdas B, C DE y E en blanco
    Do While Cells(n, 2) <> "" Or Cells(n, 3) <> "" Or Cells(n, 4) <> "" Or Cells(n, 5) <> "" Or _
             Cells(n + 1, 2) <> "" Or Cells(n + 1, 3) <> "" Or Cells(n + 1, 4) <> "" Or Cells(n + 1, 5) <> "" Or _
             Cells(n + 2, 2) <> "" Or Cells(n + 2, 3) <> "" Or Cells(n + 2, 4) <> "" Or Cells(n + 1, 5) <> "" Or _
             Cells(n + 3, 2) <> "" Or Cells(n + 3, 3) <> "" Or Cells(n + 3, 4) <> "" Or Cells(n + 1, 5) <> ""
        ' Leemos los datos de las columnas 4 y 5 (D y E)
        auxD = Trim$(Cells(n, 4))
        auxE = Trim$(Cells(n, 5))
        If auxD <> "" And auxE <> "" And IsNumeric(auxD) And IsDate(auxE) Then
            ' Tenemos un número de asiento/fecha nuevos
            antAsiento = auxD
            antFecha = auxE
            ' Después de guardar los datos dejaremos las celdas en blanco siempre que las columnas
            ' B y C estén en blanco (si no lo están se trata de un apunte con los datos bien puestos)
            If Trim$(Cells(n, 2)) = "" And Trim$(Cells(n, 3)) = "" Then
                Cells(n, 4) = ""
                Cells(n, 5) = ""
            End If
          Else
            If Cells(n, 2) <> "" And auxD = "" And auxE = "" Then ' Está sin poner el asiento y la fecha... los ponemos
                Cells(n, 4) = antAsiento
                Cells(n, 5) = antFecha
            End If
        End If
        n = n + 1
    Loop
    MsgBox "Ya está"
End Sub
El problema estaba en que, según pusiste, el asiento y la fecha estaban en las columnas C y D, y tampoco había tenido en cuenta la posibilidad que dejases filas en blanco entre medias.
Ahora te mando la hoja de cálculo con la macro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas