2012-10-19 2 views
2

엑셀 시트에는 크기가 같고 숫자 만 포함 된 두 개의 데이터 열이 있습니다.스칼라로 배열 곱하기 및 VBA에 추가하기

나는이 두 세트를 배열로 집어 넣고 매크로에 대한 계산을 수행하는 매크로를 작성하려고합니다. 구체적으로 ArrayA + 3*ArrayB을 입력 한 다음 결과를 새 열의 워크 시트에 다시 넣습니다. 아래는 제가 지금까지 가지고있는 코드입니다.

Dim ArrayA As Variant 
Dim ArrayB As Variant 
Dim ArrayC As Variant 

ArrayA = Worksheets("Sheet1").Range("A1:A5") 
ArrayB = Worksheets("Sheet1").Range("B1:B5") 

'this is where things go bad 
ArrayC = ArrayA + 3 * ArrayB 
+0

오류 메시지의 내용을 게시 할 수 있습니까? 범위 ("A1 : A5") 범위의 값을 지정하는 값 – SheldonH

+1

VBA의 배열을 곱할 수 없습니다. 배열 A와 B에서 각 쌍의 값에 대해 C = A + 3B를 계산하려고합니까? 그렇다면 배열을 반복하고 그 계산을 수행해야합니다. –

답변

3

값의 배열을 만들어야합니다. 그럼 당신은 배열을 통해 elooping 있는지 확인하십시오.

Dim ArrayA As Variant 
Dim ArrayB As Variant 
Dim ArrayC() As Variant 

ArrayA = Worksheets("Sheet1").Range("A1:A5").Value 
ArrayB = Worksheets("Sheet1").Range("B1:B5").Value 

'this is where things go bad 
'ArrayC = ArrayA + 3 * ArrayB 

'manually make array C the same size as array A 
ReDim ArrayC(LBound(ArrayA, 1) To UBound(ArrayA, 1), 1 To 1) 

Dim i As Long 'variable to count which section of the array we are on 

' loop through each spot int he array and perform the math 
For i = LBound(ArrayA, 1) To UBound(ArrayA, 1) 
    ArrayC(i, 1) = ArrayA(i, 1) + 3 * ArrayB(i, 1) 
Next i 

Worksheets("Sheet1").Range("C1:C5").Value = ArrayC 

위의 코드는 내가 어딘가에서 오타가있을 수 있습니다 안된이다. 또한 Redim을 사용할 때 variant 대신 ArrayC의 데이터 유형을 선언해야 할 수도 있습니다. 나는 내 핸드폰에서 응답 할 때 시험 할 수 없다.

+2

범위를 배열로 읽을 때 범위에 행이나 열이 하나만있는 경우에도 2 차원 배열이 만들어집니다. –

+0

편집 해 주셔서 감사합니다. 2 차원을 사용하여 읽었을뿐입니다. 따라서 1이 작동하지 않는다는 것을 알지 못했습니다. – danielpiestrak