如何在VBA函数返回阵列()来使用它在细胞阵列式(matricial式):用于多细胞分裂texte(

2019-07-19 21:44发布

我正在写一个函数在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

Answer 1:

数组公式需要使用这样的

我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( 而不是通常的回车 ) -这将定义一个数组公式,并会导致{=EXPLODE_V($B$3;" ")}周围括号(但不要手动键入他们!)。



Answer 2:

原因是你的载体实际上被横向显示,如果创建一个数组公式水平,你会得到你的号码。 因为你有一个垂直矢量使用以下命令:

Function MYARRAY(x As Integer)

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

End Function


Answer 3:

小区将不显示的阵列,则必须把这种阵列以在片材上的范围内/细胞的阵列。 或者,你可以尝试阵列转换为分隔的字符串,这可能是你不使用非常大的阵列,只要工作。

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


文章来源: How to return array() in vba function to use it in cells Array formulas (matricial formula) : for split texte in multi cells