jueves, 15 de octubre de 2015

VBA: Rellenando celdas vacías con condiciones.

Al hilo de este post del blog (leer), un lector planteaba la siguiente cuestión:
Hola buenas noches! Excelente post! ojalá me pueda ayudar, tengo una tabla en excel y rellene algunas celdas de color verde (estas son salteadas), quiero saber si hay forma de rellenar las que están en blanco de otro color. Muchas gracias por su atención.


VBA: Rellenando celdas vacías con condiciones.



La idea sería completar las celdas vacías, sin contenido y sin color de fondo verde!!.
Para ello redefiniremos la macro del post anterior, incorporándole un condicional IF THEN que controle dicha situación...

Insertamos nuestro código en un módulo estándar de nuestro proyecto de VBA desde el editor de VB:

Sub RellenaCeldasenBlanco()
Dim hoja As Worksheet
Dim UltFila As Long
Dim Rng As Range

Set hoja = Sheets("Hoja1")
With hoja
    'Encontramos la última fila con valores
    UltFila = .Range("A" & .Rows.Count).End(xlUp).Row
    'creamos el rango
    Set Rng = .Range("A1:A" & UltFila)
End With

'contador para determinar si es o no la primera celda vacía
x = 0
'recorremos el rango completo de estudio
For Each celda In Rng
    'controlamos cada celda, si está o no vacía y si además el color de fondo es el Verde
    If celda.Value = "" And celda.Interior.Color <> 5287936 Then
        'si son afirmativas ambas condiciones aumentamos el contador
        x = x + 1
        'distinguimos el caso si fuera la primera celda o siguientes
        'creamos un concatenado tipo texto con las referencias de las celdas
        If x = 1 Then
            Rng2 = celda.Address
        Else
            Rng2 = celda.Address & "," & Rng2
        End If
    End If
Next celda

'finalmente seleccionamos el rango compuesto y ejecutamos la acción de Rellenar celdas vacías
Range(Rng2).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C+1"

'liberamos las variables de objeto
Set hoja = Nothing
Set Rng = Nothing

End Sub



Tras lanzar nuestro procedimiento este es el resultado obtenido:

VBA: Rellenando celdas vacías con condiciones.


6 comentarios:

  1. Hola Ismael espero te encuentres bien, requiero de tu ayuda en esta oportunidad ya que necesito hacer que una macro cree un libro nuevo pegue algunos valores y lo guarde, el tema es que el nombre del archivo seria algo así: "Produccion_26102015", siendo la fecha dinámica para cada día o cada vez que se solicite dicha acción, pero al incluir en el nombre el rango de la celda me arroja un error (error en el metodo 'Save as' de objeto _Workbook y no me deja avanzar... Adjunto linea involucrada de la rutina...
    y de antemano muchas gracias por tu siempre valiosa colaboración...

    ActiveWorkbook.SaveAs Filename:= _
    "C:\Users\irvic.rauseo\Desktop\LINIO\Produccion\" & Range("N4").Text & ".xlsx", _
    FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    ResponderEliminar
    Respuestas
    1. Hola Irvic,
      he replicado el proceso y me confirma lo que veía.. la sentencia es correcta (y funciona bien); asi que lo único que puede fallar es:
      1- la ruta es incorrecta
      2-el nombre del fichero en N4 tiene algún caracter raro.

      Saludos

      Eliminar
    2. Hola Ismael tienes razón anoche después de tanto buscar por Internet y al obtener tu respuesta revise y pues corregí el error, muchas gracias...

      Eliminar
  2. se detene en el If celda.Value = "" And celda.Interior.Color <> 5287936 Then

    ResponderEliminar
    Respuestas
    1. Hola Miguel
      qué tal estás?, un placer saludarte igualmente...

      Revisa el código, ya que no hay nada en esa línea que impida su ejecución..
      quizá haya algún tipo de error en las celdas...

      Saludos

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.