2017-12-01 10 views
0

6 개의 다른 열에서 값을 가져와 한 열로 결합한 다음 다른 6 열에서 해당 값으로 동일한 작업을 수행하는 매크로를 작성하고 있습니다.Excel VBA - 두 열 6 개로 배열 채우기

예 (간략화를 위해 3 열 각각 대신 6을 사용) 명확히 :

|School 1|School 2|School 3|City 1|City 2|City 3| 
|a  |b  |c  |1  |2  |3  | 

array(0,0) = a 
array(1,0) = b 
array(2,0) = 3 
array(0,1) = 1 
array(1,1) = 2 
array(2,1) = 3 

각 열 2000 개 행이 함께 배열된다. 현재 코드는 다음과 같습니다.

Sub split_other() 

Dim collector(11999, 1) As String 

Dim counter1 As Integer 
    counter1 = 0 

Dim i As Range 

Dim Schools As Range 
    Set Schools = ActiveWorkbook.Worksheets("Parsing").Range("AB3", "AH2000") 
Dim Cities As Range 
    Set Cities = ActiveWorkbook.Worksheets("Parsing").Range("AJ3", "AP2000") 

For Each i In Schools 
    collector(counter1, 0) = i.Value 
    counter1 = counter1 + 1 
Next 

For Each i In Cities 
    collector(counter1, 1) = i.Value 
    counter1 = counter1 + 1 
Next 

End Sub 

오전 데 문제는 로컬 뷰 보면서, 나는 각 루프를 들어 배열을 채우기하지 않는 것을 볼 수 있다는 것입니다. 또한 매크로는 결국 형식 불일치 오류를 발생시킵니다. 전자는보다 즉각적인 관심사입니다.

+0

합니다. – BruceWayne

+0

루프 사이에서 counter1을 0으로 재설정해야합니다. –

+0

@ BruceWayne 'counter1 = counter1 + 1'은 카운터를 반복하고'i '는 숫자가 아닌 범위입니다. –

답변

1

그냥 배열에 직접 값을 할당 : 당신은`counter1`을 반복하지 않는

Sub split_other() 

Dim collector() As Variant 

With ActiveWorkbook.Worksheets("Sheet1") 
    ReDim collector(1 To .Range("AB3", "AH2000").Cells.Count, 1 To 2) As Variant 
    Dim counter1 As Integer 
     counter1 = 1 

    Dim i As Variant 

    Dim Schools() As Variant 
     Schools = .Range("AB3", "AH2000").Value 
    Dim Cities() As Variant 
     Cities = .Range("AJ3", "AP2000").Value 


    For Each i In Schools 
     collector(counter1, 1) = i 
     counter1 = counter1 + 1 
    Next 

    counter1 = 1 

    For Each i In Cities 
     collector(counter1, 2) = i 
     counter1 = counter1 + 1 
    Next 

    .Range("AQ3").Resize(UBound(collector, 1), UBound(collector, 2)).Value = collector 
End With 
End Sub 
+0

정말 고마워 Scott - 그건 속임수 였어! 불행히도 나는 충분히 새로운 것으로서 나는 트릭을하지 못했다는 것을 모른다. 설명해 주시겠습니까? – Jwok