2017-09-07 20 views
0

私はK1 ---> K(lastrow)に行くExcelマクロを書いて、値 "OptedOut"を探し、その値を見つけたらその行を削除します。私は助け人に感謝します。間違っているのは、配列を理解できないし、おそらく "c.Value =" OptedOut "Then Then Rows(c).Delete"ちょっとだけ、それが私のお尻から引っ張られたからです。Excel VBA列の値に基づいて行を削除

ありがとうございます!

Sub DuplicateDelete() 
Sheets("ALL CLIENTS").Range("A1:J10000").Copy Destination:=Sheets("ClientsAndEmailsThatAreOK").Range("A1:J10000") 

With ActiveSheet 
    LastRow = .Cells(.Rows.Count, "K").End(xlUp).Row 
    MsgBox LastRow 
End With 


'Dim c As Range 
For Each c In Range(Range(Cells("K1"), Cells(LastRow, "K"))) 
    If c.Value = "OptedOut" Then Rows(c).Delete 
Next c 


End Sub 
+0

は、このコードは、シートで、「すべてのクライアント」または「ClientsAndEmailsThatAreOK」をWROKすると仮定していますか? –

答えて

2

行(または他のオブジェクト)を削除するときに後方にループします。

また、ActiveSheetを使用する代わりにWorksheetオブジェクトを完全修飾してください(Sheets("ClientsAndEmailsThatAreOK")など)。

コードのコメント内の以下のコードは、説明してみてください。

Option Explicit 

Sub DuplicateDelete() 

Dim C As Range 
Dim i As Long, LastRow As Long 

Sheets("ALL CLIENTS").Range("A1:J10000").Copy Destination:=Sheets("ClientsAndEmailsThatAreOK").Range("A1:J10000") 

' I'm assuming you want to work with sheet "ClientsAndEmailsThatAreOK" (if not then switch it) 
With Sheets("ClientsAndEmailsThatAreOK") 
    LastRow = .Cells(.Rows.Count, "K").End(xlUp).Row 
    MsgBox LastRow 

    ' always loop backwards when deleting rows 
    For i = LastRow To 1 Step -1 
     If .Range("K" & i).Value2 = "OptedOut" Then .Rows(i).Delete 
    Next i 
End With 

End Sub 
関連する問題