2012-11-16 163 views
2

我試圖尋找一列某一類別,然後,如果條件滿足更改類別爲不同的名稱(如果這是我需要改變類)使用。我知道如何使用單個變量逐行循環訪問列,但是,當我嘗試將行和列的組合聲明爲數組(以加速循環)時,我會掛斷電話。我是VBA的新手,過去並沒有使用過陣列。以下是我到目前爲止的代碼。聲明數組在一個循環中

Dim myArray(1 To 1000, 3 To 3) 
Dim i As Integer 

For i = 1 To 1000 
myArray(i, 3) = Worksheets("Sheet1").Cells(i, 3) 

Next i 

If myArray(i) = "Category1" Then 
myArray(i) = "DifferentCategory" 
+0

只是一個信息的問題,使用數組比一個循環更快?例如; (使用你的問題沒有數組)使用for循環與if循環裏面比上面的代碼慢? – CustomX

+0

考慮更快'myArray的範圍=(...)。Value2'語法,定義爲'點心myArray的()作爲Variant'和類似'myArray的訪問(I,J)'。 – ja72

回答

0

你在你的陣列的使用不一致。你並不需要使用多維數組,如果你正在做的是越來越名稱變更:

假設你的代碼是你必須再下面應該工作:

Dim myArray(1 To 1000) 
Dim i As Integer 

For i = 1 To 1000 
myArray(i) = Worksheets("Sheet1").Cells(i, 3) 

Next i 

If myArray(i) = "Category1" Then 
myArray(i) = "DifferentCategory" 
0

無論是要更改單元格的值:

Dim i As Integer 

For i = 1 To 1000 
    If Worksheets("Sheet1").Cells(i, 3).Value2 = "Category1" Then 
     Worksheets("Sheet1").Cells(i, 3).Value2 = "DifferentCategory" 
    End If 
Next i 

或者你想要的局部變量(myArray)改變進一步使用在你的代碼:

Dim myArray(1 To 1000) As String 
Dim i As Integer 

For i = 1 To 1000 
    MyArray(i) = Worksheets("Sheet1").Cells(i, 3).Value2 
    If MyArray(i) = "Category1" Then 
     myArray(i) = "DifferentCategory" 
    End If 
Next i 
0

下1個郵輪將你在你的第一句話解釋了什麼:

Range(Worksheets("Sheet1").Cells(1, 3), Worksheets("Sheet1").Cells(1000, 3)).Replace "Category1", "DifferentCategory" 

或較行更容易閱讀的版本:

Dim targetRange As Range 
With Worksheets("Sheet1") 
    Set targetRange = .Range(.Cells(1, 3), .Cells(1000, 3)) 
    targetRange.Replace "Category1", "DifferentCategory" 
End With 

正如你可以看到一個數組是沒有必要的,因爲你正在尋找價值並取而代之。

如果你真的想雖然使用數組,這是更快的方式之一:

Dim myArray 
Dim i As Integer 
With Worksheets("Sheet1") 
    'myArray will now be a (1 to 1000, 1 to 1) array with all the cell values. 
    myArray = .Range(.Cells(1, 3), .Cells(1000, 3)) 
End With 
For i = 1 To 1000 
    If myArray(i, 1) = "Category1" Then myArray(i, 1) = "DifferentCategory" 
Next