2011-11-22 3 views

답변

1

당신은을 입력 할 수 있습니다 (X10, y)의 TD (1 개)

매우 구체적으로 나는 x와 y는 하나의 변수 지금은 SUM을하고 싶은 (x, y)를, 매크로 기능 TD를 수식은 Excel 2010에서 Ctrl + Shift + Enter를 누르면 첫 번째 버전을 사용합니다. 이렇게하면 배열 기반 수식이됩니다. 예를 들어, 이것은 잘 작동합니다 :

=SUM(A1:A6^2) 

편집을 : 사용자 정의 함수를 사용하려면 배열 매개 변수를 사용하는 함수를 수정해야합니다. Ctrl + Shift + Enter를 누르면 모든 범위가 매개 변수로 직접 함수로 처리되며 범위 매개 변수를 가져 와서 배열 결과를 반환하도록 적용되는 모든 함수가 필요합니다.

Function TD(ByVal x As Integer, ByVal y As Integer) As Integer 
    TD = x + y 
End Function 

기능 TD 전술 한 바와 같이 우리가 정의하는 기본 기능은 : 여기에서 단지 두 개의 파라미터의 합을 반환하는 함수 가상 TD(x, y) = x + y 갖는 예이다.

Function TDArray(ByVal x As Variant, ByVal y As Variant) As Integer() 
    Dim xc() As Integer 
    Dim yc() As Integer 
    Dim count As Integer 

    If TypeName(x) = "Range" Then 
     xc = GetRangeValues(x) 
     count = UBound(xc) 
    End If 

    If TypeName(y) = "Range" Then 
     yc = GetRangeValues(y) 
     count = UBound(yc) 
    End If 

    Dim i As Integer 
    Dim xVal As Integer 
    Dim yVal As Integer 
    Dim result() As Integer 
    ReDim result(1 To count) 
    For i = 1 To count 
     If TypeName(x) = "Range" Then xVal = xc(i) Else xVal = x 
     If TypeName(y) = "Range" Then yVal = yc(i) Else yVal = y 
     result(i) = TD(xVal, yVal) 
    Next 

    TDArray = result 
End Function 

기능 TDArrayTD의 기능을 반영하는 함수이지만, 또한 파라미터로 배열을 취할 수있다. Variant 매개 변수를 수락하고 범위 또는 정수가 전달되었는지 확인하여 작동합니다. Range가 전달되면 배열로 변환되고 배열의 각 요소에 TD 함수가 적용됩니다. 결과는 다음 함수에 대한 배열로 반환되며이 예제에서는 SUM을 호출합니다.

Function GetRangeValues(ByVal r As Range) As Integer() 
    Dim c As Range 
    Dim result() As Integer 
    Dim i As Integer 
    ReDim result(1 To r.Cells.count) 

    i = 1 
    For Each c In r 
     result(i) = c.Value 
     i = i + 1 
    Next 
    GetRangeValues = result 
End Function 

기능 GetRangeValues는 범위 매개 변수를 사용하고이 인덱스에 의해 반복 될 수 있기 때문에, 이동이 용이 배열로 변환하는 간단한 도우미 함수이다. 이러한 함수 정의로 무장 한 다음 셀에 다음 함수를 입력하고 Ctrl + Shift + Enter를 눌러 예상 결과를 얻을 수 있습니다 (배열 양식 TDArray을 사용합니다. 매개 변수의 쌍, 당신은 TD를 사용 TD(A4,A5) 말을, 어떤 범위에 대해, 당신은 TDArray를 사용해야합니다) :

=SUM(TDArray(X1:X10,y)) 

희망이 도움이!

+0

멋지다. 사용자 정의 함수 (Excel 함수가 아님)라고 가정합니다. –

+0

매우 구체적으로 저는 매크로 함수 TD (x, y)가 있습니다. 여기서 x와 y는 단일 변수입니다. 이제 SUM (TD (x1 : x10, y))을 수행하고 싶습니다. –

+0

내 테스트에서 볼 때, 'Range' 객체를 취하도록 함수를 수정하고, 배열 기반 수식에 참여 시키려면 배열을 반환하십시오. 나는 proto-type을 채찍질했고, 더 많은 시간을 가질 때 오늘 밤에 나중에 여기에 게시 할 것입니다. 'TD (x, y)'의 결과를 저장하고 그 결과를 더하기 위해 다른 컬럼을 사용하는 것이 더 쉬울 것입니다. – mellamokb

관련 문제