
Excel 2013 で、セルの内容が数字で始まる行を削除する方法を見つけようとしています。
たとえば、列 H には複数のエントリがあり、一部は文字で始まり、一部は数字で始まります。列 H のセルの内容が数字で始まるすべての行を削除したいとします。
どのようなご指導やアドバイスもいただければ幸いです。
さて、1 つのシートで動作すると思われる 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