2012-03-14 252 views
0

我似乎無法得到我的第二個循環的權利。我正在尋找價值「Persoonlijke prijslijst」的單元格。一旦我有這個單元格,我需要上去兩個,然後刪除8個單元格。當我調試時,它說temp = 0,所以我認爲它在我的第二個循環。Excel VBA - 循環變量

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

你的意思上去的兩行,然後從那裏刪除8行了嗎? – 2012-03-14 15:03:58

+0

是的,這是正確的 – CustomX 2012-03-14 15:06:49

+0

這是因爲你正在刪除行內的第二個循環。每次刪除一行時,臨時變量也需要更新。但最好是以凱爾的方式去做。 – mattboy 2012-03-14 15:27:18

回答

3

這是你正在嘗試?

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 2012-03-14 15:38:12

+1

@mattboy:這不是關於點。我從不關心那個;)所以你可能會扭轉你給的投票。它關於做正確的事情;) – 2012-03-14 15:42:35

+0

@Siddhart:你還是應得的。你的可能實際上工作! – mattboy 2012-03-14 15:46:28

4

另一種方法不用循環800次:

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

凱爾,你在發佈前測試了代碼嗎? ;) – 2012-03-14 15:15:33

+0

這是否適用於多種選擇?因此,如果Persoonlijke prijslijst在我的文檔中4次? – CustomX 2012-03-14 15:15:49

+0

@Tom,我已經在這個鏈接中介紹了.Find和.FindNext。 「http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/」對於如此少量的行,可以使用循環。然而,如果你使用'.Find',你必須非常小心,因爲如果你刪除了範圍,那麼'Set rng = .FindNext(rng)'會給你錯誤;)讓我知道你是否想要'.Find'代碼以及:) – 2012-03-14 15:23:26