2014-01-16 5 views
0

배열을 반환하는 함수의 구성이 걱정됩니다.배열 함수의 구성

예를 들어, 우리가

Function APTranspose(X As Variant) As Variant 

Dim v() As Variant 
Dim r, c, rc, cc As Integer 

r = X.rows.count 
c = X.Columns.count 

ReDim v(1 To c, 1 To r) 

For cc = 1 To c 
    For rc = 1 To r 
    v(cc, rc) = X(rc, cc) 
    Next 
Next 

APTranspose = v 

End Function 

을 정의하고 쓸모없는 기능

Function Identity(X As Variant) As Variant 

Dim res As Variant 

res = APTranspose(X) 

res = APTranspose(res) 

Identity = res 

End Function 

지금은 기능 (x)는 자체 x를해야한다는 분명하다 할 수 있습니다.

그러나 # VALUE! Excel에서. 일반적으로 배열 기능을 구성 할 수 없습니다. 왜 그거야 ??

감사합니다. 이 확인 작업은 라인 res = APTranspose(X)에서 APTranspose를 호출 할 때, 때문에 XRange 유형의 개체이며이 X.rows.countX.Columns.count 같은 특성을 가지고 있기 때문에

+0

하는을 ?? –

답변

0

문제가 발생합니다. 그러나이 함수를 res = APTranspose(res) - res 행의 객체라고 부르면 Range 객체가 아니므로 배열이고, 속성은 X.rows.countX.Columns.count이 아닙니다. 그리고 이로 인해 오류가 발생합니다.

당신은 다음과 같은 코드를 사용할 수 있습니다

Function APTranspose(X As Variant) As Variant 
    APTranspose = WorksheetFunction.Transpose(X) 
End Function 

Function Identity(X As Variant) As Variant 
    Dim res As Variant 
    res = APTranspose(X) 
    res = APTranspose(res) 
    Identity = res 
End Function 

UPD :

또는 다음과 같은 기능을 사용할 수 있습니다 : Excel에서이 함수를 호출

Function APTranspose(X As Variant) As Variant 
    Dim v() As Variant 
    Dim r, c, rc, cc As Integer 

    If TypeOf X Is Range Then 
     r = X.Rows.Count 
     c = X.Columns.Count 
    Else 
     r = UBound(X, 1) 
     c = UBound(X, 2) 
    End If 
    ReDim v(1 To c, 1 To r) 
    For cc = 1 To c 
     For rc = 1 To r 
     v(cc, rc) = X(rc, cc) 
     Next 
    Next 
    APTranspose = v 
End Function 

Function Identity(X As Range) As Variant 

    Dim res() As Variant 

    res = APTranspose(X) 
    res = APTranspose(res) 
    Identity = res 
End Function 
+0

배열의 행/열 수를 어떻게 검색합니까? – user3202334

+0

내 업데이트 된 답변보기 –

+0

감사하지만이 APTranspose는 작동하지 않습니다 – user3202334