2016-07-27 9 views
0

6番目のセルに正しい値が含まれていない行をいくつか削除しようとしました。そして、ここに私のコードです:VBA不適切な離散行を削除する方法

dim i As Integer 
for i = 1 to Row 
    If Worksheets("Data").Cells(i,6).Text <>"a" Then 
     Worksheets("Data").Rows(i).Delete 
    End If 
Next i 

そして私は、私はライン1(AAA)を削除した場合、前者のライン2(BBB)は1行目となり、おそらくそれは、私が残しておきたい行ではないことがわかってきましたしかし、私はすでに2になったので、実際にはこの行(bbb)を逃して、直前の行3(ccc)に直接移動します。

1 aaa => bbb 
2 bbb => ccc 
3 ccc 

この問題の良いアルゴリズムがあるかどうかわかりません。ありがとうございました。

+1

下記参照、行を削除した後の反復だけでなく、ループの制限を減らすことができるように、私はあなたがwhileループを使用することをお勧めここで 'If'の中に入ると、行を削除した後、' i = i-1'という行を追加します。 –

+0

ああ、私はいつも削除した元の行から始めるのですか? – Hiddenllyy

+0

行を削除する場合はyes、そうでない場合はyesを選択します。行をスキップしたくない場合 –

答えて

2

行を削除する場合は、下から上に移動することをお勧めします。
for i = 1 to Rowからfor i = Row to 1 Step -1に変更してください。

これで、行を削除すると、その行の上にある行の行番号は変更されません。

2

逆の順序で操作してみましょう。以下のコードを変更してみてください。

Sub Deleterows() 
    Dim lRow As Long 
    Dim iCntr As Long 
    lRow = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row ' calculates no of rows used in A column 

    For iCntr = lRow To 6 Step -1 ' loop in reverse order 
     If Cells(iCntr, 1) = "str" Then 'You can change this text 
      Sheets("Data").Rows(iCntr).Delete 
     End If 
    Next 

    End Sub 
+0

申し訳ありませんが、私は静かではなかった、 'lRow'は私がこのシートにある行の数ですか?私は最後の一行 'lRow'から6に行くのですか? – Hiddenllyy

+0

修正! .IrowはA列で使用される行数です –

+0

ありがとうございます!ありがとう、ありがとう、私は答えとして1つを選ぶ必要があり、ダーレン氏が最初に来る...まだあなたの答えは完璧です! – Hiddenllyy

3

削除するときは、常に最後から最初に繰り返します。

dim i As Integer 
for i = Row to 1 Step -1 
    If Worksheets("Data").Cells(i,6).Text <>"a" Then 
     Worksheets("Data").Rows(i).Delete 
    End If 
Next i 
1

あなただけのシンプルなソリューションを持っていない理由

Dim i As Integer 
Dim rows As Integer 
row_count = 3 
i = 1 

While i <= row_count 
    If Worksheets("Data").Cells(i, 6).Text <> "a" Then 
     Worksheets("Data").rows(i).Delete 
     i = i - 1 
     row_count = row_count - 1 
    End If 
    i = i + 1 
Wend 
関連する問題