안녕하세요 저는 Excel에서 VBA를 사용하고 있으며 두 범위의 값을 셀 수식에서 사용자 지정 함수로 전달해야합니다. 이 함수는 다음과 같습니다.셀 내에서 사용자 지정 함수에 범위 전달
Public Function multByElement(range1 As String, range2 As String) As Variant
Dim arr1() As Variant, arr2() As Variant
arr1 = Range(range1).value
arr2 = Range(range2).value
If UBound(arr1) = UBound(arr2) Then
Dim arrayA() As Variant
ReDim arrayA(LBound(arr1) To UBound(arr1))
For i = LBound(arr1) To UBound(arr1)
arrayA(i) = arr1(i) * arr2(i)
Next i
multByElement = arrayA
End If
End Function
자세히 알 수 있듯이 범위의 문자열 표현을 전달하려고합니다. 디버거에서 제대로 전달 된 및 볼 수있는 첫 번째 눈에 띄는 문제가 arr1 (i) 읽기 시도 할 때 "범위 밖으로 첨자"로 표시됩니다. 나는 또한 범위 자체 (즉 range1 ... Range1)를 통과하려고했지만 성공하지 못했습니다.
가장 좋은 의문은 액티브 시트가 수식 (시트 이름이 문자열의 일부 임)과 다른 시트에서 호출 되었기 때문에 액티브 시트와 관련이 있다는 것이었지만 두 시트를 모두 시도한 이후에 사라졌습니다. 동일한 시트 내에서 및 코드에서 시트를 지정하여.
BTW 셀의 수식은 다음과 같다 :
= AVERAGE (multByElement ("A1 : A3」, 「B1 : B3"))
또는
= AVERAGE (multByElement을 ("내 Sheet1! A1 : A3", "내 Sheet1! B1 : B3"))
에 대해서는 다른 시트에서 호출 할 때 사용합니다.
왜 배열 함수를 사용하지 않는지 궁금합니다. 즉, bar = AVERAGE (A1 : A3 * B1 : B3)에 수식을 입력하고 Ctrl + Shift + Enter를 누르면 A1의 각 요소에 곱하는 배열 함수가 삽입됩니다. A3 by B1 : B3 – Fionnuala
이것은 내가 생각한 좋은 생각이지만 시트의 공간과이 기능을 사용할 수있는 확장 가능성으로 인해 이것을 시도하는 것을 선호했습니다. – Luis