如何在vba函数中返回array()以在单元格中使用它数组公式(matricial formula):用于多单元格中的split texte

时间:2013-02-14 13:03:06

标签: arrays excel excel-vba split excel-formula vba

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

=MYVALUE(A1)

现在我写了另一个返回数组(1,2,3,4,...)的函数,我用数组公式替换了我的excel公式:

{=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

3 个答案:

答案 0 :(得分: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 INSTEAD的常用 ENTER ) - 这将定义一个ARRAY公式,并在其周围生成{=EXPLODE_V($B$3;" ")}括号(但不要手动输入!)。

    sample of split cells texte

答案 1 :(得分:4)

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

Function MYARRAY(x As Integer)

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

End Function

答案 2 :(得分:-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