Excel 2013: eliminar una fila según una referencia de celda específica

Excel 2013: eliminar una fila según una referencia de celda específica

Estoy intentando descubrir cómo eliminar una fila en Excel 2013 donde el contenido de una celda comienza con un número.

EG En la columna HI tiene varias entradas, algunas que comienzan con letras y otras que comienzan con números. Quiero eliminar todas las filas donde el contenido de la celda en la columna H comienza con un número.

¡Cualquier orientación/consejo será bienvenido!

Bien, he creado un poco de código VBA que parece funcionar en una sola hoja:

Sub Macro_01()
Dim L As Long, i As Long
L = Cells(Rows.Count, "F").End(xlUp).Row
For i = L To 1 Step -1
    If Left(Cells(i, "F"), 1) Like "[0-9]" Or Cells(i, "F") = "" Then
        Rows(i).Delete
    End If
Next
End Sub

Estoy tratando de descubrir cómo hacer que esto funcione en las 284 hojas del libro. Probé Do/Loop pero se ejecuta sin cesar (y deja de responder). Como sé cuántas hojas hay, ¿hay algún comando simple que deba ingresar en el código?

Respuesta1

¿Cómo funciona esto? (Supongo que el código que publicaste funciona como esperabas y solo necesitas ejecutarlo entodohojas.)

Sub Macro_01()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim L As Long, i As Long
Dim ws      As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    L = .Cells(Rows.Count, "F").End(xlUp).Row
    For i = L To 1 Step -1
        If Left(.Cells(i, "F"), 1) Like "[0-9]" Or .Cells(i, "F") = "" Then
            .Rows(i).Delete
        End If
    Next
Next ws

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Simplemente recorra cada hoja, asegurándose de restablecer la variable de la última fila. Luego girando el cálculo/actualizando la pantalla hasta el final. Tenga en cuenta que si tiene más de 200 hojas, esto puede llevar algún tiempo.

Finalmente, asegúrese de ejecutar esto primero en una copia de sus datos; como sabrá, no puede deshacer una macro.

Respuesta2

Gracias por tu ayuda hasta ahora, creo que lo he resuelto:

Sub Macro_01()
ActiveSheet.Next.Select
Do
Dim L As Long, i As Long
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
L = Cells(Rows.Count, "F").End(xlUp).Row
For i = L To 1 Step -1
If Left(Cells(i, "F"), 1) Like "[0-9]" Or Cells(i, "F") = "" Then
Rows(i).Delete
End If
Next
Next ws
If ActiveSheet.Index <> Sheets.Count Then
ActiveSheet.Next.Select
Else
Exit Do
End If
Loop
End Sub

información relacionada