2016-05-03 3 views
1

私はVBAの初心者ですので、おそらく非常に初歩的な間違いです。 列にSの行がないワークブックの各ワークシートのすべての行を削除します。VBAの列の内容に条件付きの行を削除する

これまでに回答した質問の洞察を使って次のコードを書いていますが、機能しません

Dim ws As Worksheet 

For Each ws In ThisWorkbook.Worksheets 
For Each cell In Range("s1:s400") 
    If IsEmpty(cell) Then 
    cell.EntireRow.Delete shift:=xlUp 
    End If 
Next 
Next 

最初のループはまったく実行されていません。アクティブシートのみが削除された行を持ちます。 2番目のループは、S列の空のセルを含むすべての行が削除されているわけではないため、矛盾して適用されます。

ご協力いただきありがとうございます。

答えて

2

2つのもの。

まずあなたが後方ループ、ループ内の行を削除するときにRange("s1:s400")ws.Range("s1:s400")

セカンドあるべき範囲オブジェクトにシートを割り当てる必要があります。これは、For Eachループで行うことができないので、ループのために定期的に変更し、行がHEREを参照してください削除に関する詳細かつ迅速な方法についてはStep -1

Dim ws As Worksheet 
Dim i As Long 

For Each ws In ThisWorkbook.Worksheets 
    For i = 400 To 1 Step -1 
     If ws.Cells(i, "S").Value = "" Then 
      ws.Rows(i).Delete 
     End If 
    Next 
Next 

+0

それは意味がある(そしてうまくいく)。私は10分の強制待ちが上がったときにこの回答を受け入れます。ありがとう。 – SmonJunior

関連する問題