2016-01-25 82 views
2

我需要運行一個宏來修復excel工作表中的年份。 「十一月 - 一月」左邊的一年是2010年,但我加了1加上2011年。然後循環需要找到下一個「Nov_Jan」並且執行2011 + 1 = 2012年。爲了停止循環,我知道我需要計算「Nov-Jan」實例的數量並運行多個實例。所以只有4個「11月 - 1月」,只運行4次循環。下面的代碼在同一個單元格內運行循環,並且不會繼續尋找下一個「Nov-Jan」。我無法弄清楚爲什麼。我有一個圖像顯示我需要從「之前」 - >「之後」去,但我的代碼從「之前」 - >「我有什麼」。VBA運行循環,直到達到實例數

Dim iCount As Integer 
Dim i As Integer 

i = 1 

iCount = Application.WorksheetFunction.CountIf(Range("B:B"), "Nov - Jan") 

Cells.Find(what:="Nov - Jan", after:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False _ 
    , SearchFormat:=False).Activate 

Do Until i > iCount 
    i = i + 1 

    ActiveCell.Offset(0, -1).Select 
    ActiveCell.Value = ActiveCell.Value + 1 

    Cells.Find(what:="Nov - Jan", after:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False _ 
    , SearchFormat:=False).Activate 
Loop 

我需要從 「之前」 去 - > 「後」,但我的代碼都從 「前」 - > 「我有什麼」

enter image description here

回答

3

試試這個簡單的代碼:

Sub loops() 
Dim c as range 
'Change the "Sheet2" reference to your sheet name. 
With Worksheets("Sheet2").Range("B:B") 
    Set c = .Find("Nov - Jan", LookIn:=xlValues) 
    If Not c Is Nothing Then 
     firstAddress = c.Address 
     Do 
      c.Offset(, -1) = c.Offset(, -1) + 1 
      Set c = .FindNext(c) 
     Loop While Not c Is Nothing And c.Address <> firstAddress 
    End If 
End With 
End Sub 

當使用find方法時,它有一個內置的下一個函數。它也可以被分配到一個範圍,然後可以被操縱來做需要的事情。

查看HERE瞭解更多信息。

在您的代碼中,您正在循環,但循環每次都會重置搜索,因此每次只搜索一次。

+1

...希望我在寫同樣的東西之前看過這個東西! – Jeeped

+1

@Jeeped我認爲你在我能做到的時候給我2比1的數字。 –

+0

@ScottCraner你是一個救星!非常感謝! – code3dgyt3ch