Buscar celda vacía y completar - luego borrar

Estoy trabajando en un código para encontrar celdas vacías en un rango de datos (columna A), y completarlas con un texto y un formato de fondo (color).

El código me funciona, pero no se si es razonable cómo lo hago.

Option Explicit
Dim i As Long
Dim u As Long
Dim Sttexto As String
__________
Sub completar_vacios()
u = Range("A" & Rows.Count).End(xlUp).Row
Sttexto = Range("E6").Value
For i = 1 To u
 i = i
    If Cells(i, "A").Value = Empty Then   'buscar celdas vacìas en un rango, hasta i=u
       With Cells(i, "A")
       .Value = Sttexto                   ' asigna valor de variable Sttexto
       .Interior.Color = RGB(255, 255, 0) ' asigna color amarillo
       End With
    End If
Next i
End Sub

Luego, decido hacer el mismo procedimiento, pero para borrar lo anterior.

Sub Borrar_Contenido()
'variables declaradas al principio
u = Range("A" & Rows.Count).End(xlUp).Row
'Sttexto value en completar_vacios sub
For i = 1 To u
 i = i
    If Cells(i, "A").Value = Sttexto Then    'si contenido celda igual a variable Sttexto, elimina contenido y cambia color celda
        With Cells(i, "A")
        .Value = ""
        .Interior.Color = RGB(255, 255, 255)
        End With
    End If
Next i
End Sub

Es razonable el código? En definitiva, por lo que he testeado, funciona, cumple el objetivo. Pero no se si está bien diseñado el código, y me interesa esuchar la opinión de expertos en el tema.

1 respuesta

Respuesta
1

Soy de la opinión que si algo funciona como esperamos, entonces está bien hecho ;-)

En todo caso, especialmente para el primer caso yo optaría por emplear el método de rellenar celdas vacías:

Sub RellenaCeldasenBlanco()
Dim hoja As Worksheet
Dim UltFila As Long
Dim Rng As range
Set hoja = Sheets("Hoja3")
stTexto = Range("E6").Value
With hoja
    UltFila = .range("A" & .Rows.Count).End(xlUp).Row
    Set Rng = .range("A1:A" & UltFila)
End With
With Rng.SpecialCells(xlCellTypeBlanks)
    .Value = stTexto
    .Interior.Color = RGB(255, 255, 0) '
End With
Set hoja = Nothing
Set Rng = Nothing
End Sub

Para el segundo código, siempre que el rango no sea muy elevado, que hay demasiadas celdas, lo veo razonable...

Hola, gracias por la pronta respuesta.

Soy muy nuevo en VBA, apenas aprendiendo la sintaxis, para darme cuenta de la utlización de:

Dim hoja As Worksheet
Dim Rng As range

Como que lo entiendo, pero no lo tengo interiorizado.

Cuál es la ventaja de tu método? Es más veloz? Más eficiente?

Gracias.

En general al evitar el loop el proceso se hace infinitamente más rápido (sobre todo visible cuando son rangos grandes).

El definir el tipo de datos de las variables empleadas, por ejemplo:

Dim hoja As Worksheet
Dim Rng As range

facilita y agiliza el tratamiento

;-)

Sdls

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas