2016-12-08 7 views
0

マクロを作成しましたが、削除中に行が実際に変更されたため実際には機能しません。ユーザはテーブル内の任意のセル数を選択する。マクロが実行されると、選択されたセルに属する行だけが削除されます。これまでに何を得たのですか。削除するExcelマクロをシート内の選択したセルに基づいて作成します

Sub DeleteSelectedRows() 
Dim Cell As Range 
With Sheet1 
For Each Cell In Selection 
     .Range(Cell.Address).EntireRow.Delete 
Next Cell 
End With 
End Sub 

助けていただければ幸いです。

+4

'Selection.EntireRow.Delete'をループする必要はありません。 –

答えて

1

コレクションを変更するときに、最後の行のインデックスから始まり、単純Forループを使用For Eachループを使用しないでください(:まだだけ実際に選択されている行を削除しながら、このコードは、その可能性を考慮うまたは列インデックス)に移動し、最初のインデックスに戻る。

ループがStep -1に設定されていることを確認してください。 Excelでは行/列を削除すると残りの行/列が上/左に移動するため、最初の編集後にすべての索引が間違っている可能性があるため、逆方向が必要です。

Dim rng as Range 
Set rng = Selection 

Dim firstRow as Integer 
Dim lastRow as Integer 

firstRow = rng.Row 
lastRow = rng.Rows(rng.Rows.Count).Row 

Dim i as Integer 
For i = lastRow to firstRow Step -1 
    Call ActiveSheet.Rows(i).Delete()  
Next i 
+0

これはSelection.areasよりもうまくいきました。とても有難い – ExcelForFreelancers

1

一部の(おそらくまれな)ケースでは、ユーザーはCtrl +クリックして不連続な範囲を選択できます。

Sub DeleteSelectedRows() 

    Dim rArea As Range 

    For Each rArea In Selection.Areas 
     rArea.EntireRow.Delete 
    Next rArea 

End Sub 
+0

優れています。本当にありがとう。うまくいきました – ExcelForFreelancers

関連する問題