2012-03-14 29 views
0

私は2番目のループを正しく取得できないようです。私は値 'Persoonlijke prijslijst'のセルを探しています。私はこのセルを持っていると、私は2つ上がって8を削除する必要があります。私がデバッグするとき、それはtemp = 0と言うので、私は2番目のforループにあると推測します。Excel VBA - 変数forループ

Dim i As Integer 
For i = 1 To 800 
    Range("C" & i).Select 
    If Range("C" & i).Value = "Persoonlijke prijslijst" Then 
     Dim temp As Integer 
     For temp = i - 2 To temp + 8 
      Range("C" & temp).EntireRow.Delete Shift:=xlToLeft 
     Next temp 
    End If 
Next i 
+1

あなたは2つの行を上がると、その後ダウンそこから8行を削除意味しますか? –

+0

はい、それは間違いです – CustomX

+0

2番目のforループ内の行を削除しているからです。行が削除されるたびに、一時変数も更新する必要があります。しかし、それをカイルの方法で行う方が良いです。 – mattboy

答えて

3

これはあなたの試みですか? 800回ループすることなく、

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim StrSearch As String 
    Dim i As Long 

    '~~> Change this to the relevant sheet name   
    Set ws = Sheets("Sheet1") 

    StrSearch = "Persoonlijke prijslijst" 

    With ws 
     For i = 800 To 1 Step -1 
      If .Range("C" & i).Value = StrSearch Then 
       .Rows(i - 2 & ":" & i + 5).Delete 
      End If 
     Next i 
    End With 
End Sub 
+0

+1 :)良い提案Sid – SWa

+1

@mattboy:それはポイントではないです。私はそれを気にしません;)あなたはあなたが与えた投票を逆転させるかもしれません。それは正しいことをすることについて); –

+0

@シッドハルト:それでもあなたはそれに値する。おそらくあなたの作品はおそらく実際に動作します! – mattboy

4

別の方法:

Sub testing() 

Dim rng As Range 
Dim fAddress As String 
Dim rngRows As Range 

With Sheet1.Range("C1:C800") 
    Set rng = .Find("Persoonlijke prijslijst") 
    If Not rng Is Nothing Then 
     fAddress = rng.Address 
     Do 
     If rngRows Is Nothing Then 
      Set rngRows = rows(rng.Row - 2 & ":" & rng.Row + 5) 
     Else 
      Set rngRows = Union(rngRows, rows(rng.Row - 2 & ":" & rng.Row + 5)) 
     End If 
      Set rng = .FindNext(rng) 
     Loop While Not rng Is Nothing And rng.Address <> fAddress 
    End If 
End With 

rngRows.EntireRow.Delete 

End Sub 
+1

カイル、投稿する前にコードをテストしましたか? ;) –

+0

これは複数選択することができますか?私の文書の中にPersessionlijke prijslijstが4回ある場合は? – CustomX

+0

@Tom、私はこのリンクで.Findと.FindNextについて取り上げました。 "http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/"このような少数の行については、ループを使用することができます。しかし、 '.Find'を使用する場合は、範囲を削除して' Set rng = .FindNext(rng) '行でエラーを表示するように注意しなければなりません;)' .Find'同様にコード: –