Excel 2013 — Удаление строки на основе ссылки на определенную ячейку

Excel 2013 — Удаление строки на основе ссылки на определенную ячейку

Я пытаюсь понять, как удалить строку в Excel 2013, содержимое ячейки которой начинается с цифры.

Например, в столбце HI есть несколько записей, некоторые из которых начинаются с букв, некоторые — с цифр. Я хочу удалить все строки, в которых содержимое ячеек в столбце H начинается с цифры.

Любые рекомендации/советы будут приняты с благодарностью!

Итак, я создал небольшой фрагмент кода VBA, который, похоже, работает на одном листе:

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

Я пытаюсь понять, как заставить это работать на всех 284 листах в рабочей книге. Я пробовал Do/Loop, но он просто работает бесконечно (и перестает отвечать). Поскольку я знаю, сколько там листов, есть ли простая команда, которую мне нужно ввести в код?

решение1

Как это работает? (Я предполагаю, что код, который вы опубликовали, сам по себе работает так, как вы ожидаете, и вам просто нужно запустить его навселисты.)

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

Просто пройдитесь по каждому листу, убедившись, что сбросили последнюю переменную строки. Затем включите расчет/обновление экрана до конца. Обратите внимание, если у вас 200+ листов, это действительно может занять некоторое время.

Наконец, не забудьте сначала запустить макрос на копии своих данных, поскольку, как вы знаете, отменить макрос невозможно.

решение2

Спасибо за вашу помощь, я думаю, что я решил эту проблему:

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

Связанный контент