
Я пытаюсь понять, как удалить строку в 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