• ベストアンサー

コードの、どこが間違ってますか?

下記は、選択した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 ----

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。先の回答を Worksheets(i).Cells(4, 6).End(xlDown).Offset(2, 0).Resize(10,1).EntireRow.Delete Shift:=xlUp に訂正させてください

oshietecho-dai
質問者

お礼

即答、誠に有難うございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 アイデアは良いと思いますが、意外とその質問のコードは、手が掛かる内容です。 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

oshietecho-dai
質問者

お礼

こんばんは。 誠に有難うございました。 いつものことですが、大変に、手が掛かってしまいました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

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 のほうが一般的だと思います

関連するQ&A