- ベストアンサー
コードの、どこが間違ってますか?
下記は、選択した1つのシートだけしか、実行されませんが、どこが間違ってますか? よろしくお願い致します。 ---- Sub 不要な行を削除する() Dim i As Integer On Error Resume Next For i = 9 To Worksheets.Count Worksheets(i).Range(Cells(4, 6).End(xlDown).Offset(2, 0).EntireRow, Cells(4, 6).End(xlDown).Offset(12, 0).EntireRow).Select Selection.Delete Shift:=xlUp Next i End Sub ----
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#01です。先の回答を Worksheets(i).Cells(4, 6).End(xlDown).Offset(2, 0).Resize(10,1).EntireRow.Delete Shift:=xlUp に訂正させてください
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 アイデアは良いと思いますが、意外とその質問のコードは、手が掛かる内容です。 On Error Resume Next の使い方が、難しいですね。何に対して、エラーが発生するか見極めないと難しいですから。 私は、きちんと試してみないから自信はないけれど、こんな感じになるのではないかと思いました。 たぶん、エラーとラップはいらないと思います。 Sub DelRowsinSheets() Dim i As Integer 'On Error Resume Next For i = 9 To Worksheets.Count With Worksheets(i).Range("F4").End(xlDown) If .Row < (65536 - 11) Then .Offset(2, 0).Resize(11).EntireRow.Delete Shift:=xlUp End If End With Next i End Sub
お礼
こんばんは。 誠に有難うございました。 いつものことですが、大変に、手が掛かってしまいました。
- zap35
- ベストアンサー率44% (1383/3079)
On Error Resume Next を書いたのでエラーが起きても、あたかも正常に実行されたように見えるだけではないでしょうか。 On Error Resume Next をコメントにしてステップ実行して見てください。どこでおかしくなるか分かると思います とりあえず思い当たるのは >Worksheets(i).Range(Cells(4, 6).End(xlDown).Offset(2, 0).EntireRow, Cells(4, 6).End(xlDown).Offset(12, 0).EntireRow).Select のように一旦セレクトするなら、先にシートをActivateしないとならないはずですが、それがありませんね。たぶんそれが原因と思います Worksheets(i).Range(Cells(4, 6).End(xlDown).Offset(2, 0), Cells(4, 6).End(xlDown).Offset(12, 0)).EntireRow.Delete Shift:=xlUp のほうが一般的だと思います
お礼
即答、誠に有難うございました。