4

我正在用 VBA 编写一个函数以在 excel 公式中使用,如果我的函数返回单个值就可以了:

=MYVALUE(A1)

现在我编写了另一个返回 Array(1,2,3,4,...) 的函数,并将我的 excel 公式替换为 Array 公式:

{=MYARRAY(A1)}

但是当我拉伸公式时,所有单元格都会显示我的数组的第一个值。为什么 ?

这是我的 VBA 源代码(complement.xlam):

Function MYVALUE(x as integer)
    MYVALUE = 123
End Eunction

Function MYARRAY(x as integer)
    MYARRAY = Array(10,20,30)
End Eunction
4

3 回答 3

6

数组公式需要这样使用

我的 VBA 在多个单元格中拆分文本

Function EXPLODE_V(texte As String, delimiter As String)
    EXPLODE_V = Application.WorksheetFunction.Transpose(Split(texte, delimiter))
End Function
Function EXPLODE_H(texte As String, delimiter As String)
    EXPLODE_H = Split(texte, delimiter)
End Function
  1. 选择C3:C7定义矢量方向的区域。
  2. 按下F2可现场编辑并键入以下公式:=EXPLODE_V($B$3;" ")
  3. CTRL+ SHIFT+ ENTER而不是通常的ENTER) - 这将定义一个 ARRAY 公式并在{=EXPLODE_V($B$3;" ")}其周围产生括号(但不要手动输入它们!)。

    拆分单元格文本样本

于 2013-02-15T16:59:42.480 回答
4

原因是你的向量实际上是水平显示的,如果你水平创建一个数组公式,你会得到你的数字。为了让你有一个垂直向量,请使用以下内容:

Function MYARRAY(x As Integer)

    MYARRAY = Application.WorksheetFunction.Transpose(Array(10, 20, 30))

End Function
于 2013-02-14T16:35:14.400 回答
-2

单元格不会显示数组,您必须将该数组转换为工作表上的单元格范围/数组。或者,您可以尝试将数组转换为分隔字符串,只要您不使用非常大的数组,它就可以工作。

Public Function MYARRAY(x As Integer)

Dim tmpArray() As Variant
Dim i As Long
Dim arrayString As String

tmpArray = Array(10, 20, 30)

For i = LBound(tmpArray) To UBound(tmpArray)
    If arrayString = vbNullString Then
        arrayString = tmpArray(i)
    Else:
        arrayString = arrayString & ", " & tmpArray(i)
    End If
Next

MYARRAY = "{" & arrayString & "}"

End Function
于 2013-02-14T13:33:45.267 回答