두 범위를 사용하고 range1의 첫 번째 셀에 range2의 첫 번째 셀을 곱하고 두 번째 셀의 range1에 두 번째 셀을 곱하는 Excel UDF (사용자 정의 함수)를 작성하려고합니다. range2 등으로 배열 한 다음 결과를 배열에 저장합니다.두 개의 범위/배열을 셀 단위로 곱합니다.
셀 A1 : A4 {1,0,1,2}의 배열 1과 셀 B1 : B4 {1,1,0,1}의 배열 2를 상상해보십시오. 함수 VECTORMULT (A1 : A4, B1 : B4)는 {1,0,0,2}를 반환합니다.
Function VECTORMULT(array1 As Range, array2 As Range) As Variant
'takes 2 ranges and multiplies cell1 by cell1, cell2 by cell2, etc _
and stores it in a vector array
Dim Result() As Variant
Dim largerArray As Range
Dim smallerArray As Range
Dim i As Integer
'determine the smaller range to determine UBound in Result() array
If array1.Cells.Count >= array2.Cells.Count Then
Set largerArray = array1
Set smallerArray = array2
Else
Set largerArray = array2
Set smallerArray = array1
End If
ReDim Result(1 To smallerArray.Cells.Count)
'THIS IS THE PART THAT FAILS
For i = 1 To smallerArray.Cells.Count
Result(i) = largerArray.Item(i).value * smallerArray.Item(i).value
Next i
VECTORMULT = Result
End Function
I 무제한 ParamArray 인수 허용() 및 배열로 각각의 Arg을 파싱보다 일반적인 함수를 작성 구상했지만, 난이 단순 해 보이는 세포 iterator 함수를 해결할 수 없다. 나는 VBA가
Range(someRange).Item(i)
같은 몇 가지 기본 방식으로 범위를 단계별로 처리 할 수있는 생각하지만 가치가 무엇을, 나는 내가 올바른 행/열 굴절률들로 대체 할 때 정확한 값을 얻을 수 없습니다 ... 것입니까 들어 Item 함수의 경우 아래와 같습니다. 그러나 Result는 배열 대신에 1 개의 셀에서만 작동합니다. "i"를 전달하는 방법을 알아야합니다.
'substitute Item(1,1) for Item(i) and it DOES work
For i = 1 To smallerArray.Cells.Count
Result(i) = largerArray.Item(1,1).value * smallerArray.Item(1,1).value
Next i
왜 실패합니까? 오류가 있습니까? 아니면 예상 한 결과를 얻지 못했습니까? BTW, 오타 (typo) 일지 모르지만 함수가'VECTORMULTrng'이지만'VECTORMULT'에'Result'를 지정하고 있습니다. – L42
고맙습니다. 그 기능의 다른 버전을 시도한 결과입니다. 이 코드를 내 코드에서 수정하면 함수가 마지막 코드 조각에 대한 올바른 값을 반환하므로이 문제도 수정되었습니다. 범위를 넘어서서 배열을 반환하는 주된 문제는 여전히 존재합니다. – smokysunday
첫 번째 질문에 답하기 위해 기본 코드 스 니펫에 표시된 함수가 #VALUE 오류를 반환합니다. – smokysunday