2012-11-16 3 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

그냥 유익한 질문 :

당신이 정말로하지만 배열을 사용하려면

, 이것은 빠른 방법 중 하나입니다? 예를 들어; (배열없이 질문 사용) if 루프를 사용하여 for 루프를 사용하면 위의 코드보다 느립니다? – CustomX

+0

'myArray = Range (...). Value2' 구문을'Dim myArray() as 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 
을다음 1 라이너가 첫 번째 문장에서 설명 무엇을 할 것인가
0

:

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