2013-09-22 105 views
0

我對宏很新,所以這可能是一個愚蠢的問題。我搜索和搜索,但還沒有找到答案,所以我希望在這裏的專家將幫助我:)Excel VBA:使用包含範圍內的單元格索引的變量

在我的代碼我有一個大範圍,我搜索了一個特定的特徵(所有單元格都有值「完成」,「正在進行」或「等待」)。當我發現價值「正在進行的」,我想使用細胞創建一個較小的範圍內,我將使用一個計數器,我可以,但是,不使小範圍工作:(

Dim range1 As Range 

For Each cell In Sheet2.Range("A5:Y5") 
    If cell.Value = "Ongoing" Then Set range1 = Cells(cell.Row, cell.Column) 
Next cell 

i = 0 

For Each cell In Sheet2.Range("A5:range1") 
    If cell.Value = "Done" Then 
     i = i + 1 
    End If 
Next cell 
+0

您正在使用範圍錯誤。在任何情況下,即使在正確設置範圍的情況下,您打算對此代碼執行的操作也不會輸出您想要的內容。您希望定義由值爲「正在進行」的所有單元形成的較小範圍(範圍1)(即,單元格的全部內容將爲「正在進行」);那麼你想迭代這個範圍來找到其值不同的單元格(「完成」),總是會輸出相同的結果(只要所有這些單元格都有「正在進行」,就不會找到單個匹配項)。 。請說清楚你想完成什麼。 – varocarbas

+0

我有大約20個按時間順序執行的任務。所有已執行的任務將被手動標記爲「完成」。一個任務將被標記爲「正在進行」,未來任務將被標記爲「等待」。 我感興趣的是知道我們已經到了什麼任務。這就是完成「正在進行」的任務的多少任務,因爲我需要這些信息用於其他代碼。我雖然可以通過查找關於哪個單元格包含「正在進行」的信息來做到這一點,然後使用計數器來計算出第一個任務和正在進行的任務之間有多少個單元格。 –

+0

excel中是否有「古典」列表函數?我可以在Python中簡單添加和刪除項目的地方? –

回答

0

在這裏你有一個簡單的代碼執行一些動作你想要的:

Dim rangeToSearch As Range 
    Dim doneCount As Integer, onGoingCount As Integer, onGoingDones(50) As Integer 
    Set rangeToSearch = Sheet2.Range("A5:Y5") 

    doneCount = 0 
    onGoingCount = 0 
    For Each cell In rangeToSearch 
     If (Not IsEmpty(cell)) Then 
      If LCase(cell.Value) = "done" Then 
       doneCount = doneCount + 1 
      ElseIf LCase(cell.Value) = "ongoing" Then 
       onGoingCount = onGoingCount + 1 
       onGoingDones(onGoingCount) = doneCount 
       doneCount = 0 
      End If 
     End If 
    Next cell 

它計算在數組(onGoingDones的「完成」,「正在進行的」細胞,並將它們存儲之間(帽無所謂)數量;可以只是處理多達50個元素,但我想這已經足夠了)

+0

非常感謝:)我現在正在工作 –

+0

@EsbenEickhardt歡迎您。 – varocarbas

相關問題