Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组函数的组合_Arrays_Vba - Fatal编程技术网

Arrays 数组函数的组合

Arrays 数组函数的组合,arrays,vba,Arrays,Vba,我关心返回数组的函数的组合 例如,让我们定义 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) Nex

我关心返回数组的函数的组合

例如,让我们定义

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本身

然而我得到了#价值!在Excel上。一般来说,我无法合成数组函数。这是为什么


谢谢

出现问题的原因是,当您在
res=APTranspose(X)
行中调用
APTranspose
时,它工作正常,因为
X
Range
类型的对象,它具有
X.rows.count
X.Columns.count
等属性。但是,当您在第
res=APTranspose(res)
-
res
行中调用此函数时,它不是
Range
对象,它是一个数组,并且没有属性
X.rows.count
X.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:

也可以使用以下功能:

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

在Excel中调用这个函数,那么我如何检索数组的行数/列数呢?真的吗?这对我很管用。你遇到了什么麻烦?