2017-10-06 19 views
0

列Mのデータに基づいてレポートから行を削除しますか?レポートのサイズは行ごとに可変ですが、列の幅は同じです。セル内の「有効」とは、削除されたことを意味します。VBA Excel列の値に基づいて行を削除します。

Sub Create() 
Dim Range1 As Range 
Set Range1 = Range("M:M") 
For Each cell In Range1 
    If ActiveCell.Value = "Valid" _ 
    Then ActiveCell.EntireRow.Delete 
Next cell 
End Sub 
+2

アクティブセルでは動作しません。あなたは 'cell'イテレータ変数を使用していません。 –

+0

また、**私は非常に**列のすべての行をループしないことをお勧めします。その範囲も最小限に抑えてください。 – BruceWayne

答えて

1

これは約ActiveCellであるが、列「M:M」の細胞はこれである。また、ボトムアップを開始する必要があります(明白ではありませんが真です)。だから、10000よりも少ない行があると仮定すると、あなたはこのようなものが必要:

Sub Create() 
    Dim LastRow As Long 
    Dim i As Long 

    LastRow = Range("M10000").End(xlUp).Row 
    For i = LastRow To 1 Step -1 
     If Range("M" & i) = "Valid" Then 
      Range("M" & i).EntireRow.Delete 
     End If 
    Next 
End Sub 
0

私はあなたのFor Eachを使用して方法を見つけた:

Public Sub Create() 
Dim Range1 As Range 
Dim Cell 
Dim LastRow As Long 

    Set Range1 = Range("M1") 
    ' assume, there is some data in the first row of your sheet 
    LastRow = Range1.CurrentRegion.Rows.Count 
    ' otherwise, find last cell in column M with a value, assume before row 10000 
    LastRow = Range("M10000").End(xlUp).Row 

    ' select the cells to process 
    Set Range1 = Range(Range1, Range1.Offset(LastRow, 0)) 

    ' process the rows 
    For Each Cell In Range1 
     If Cell.Value = "Valid" Then 
      Debug.Print "' delete row from at address :: " & Cell.Address 
      Range(Cell.Address).EntireRow.Delete 
     End If 
    Next 
End Sub 
関連する問題