我正在写一个函数在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
数组公式需要使用这样的
我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
- 选择区域
C3:C7
此定义向量方向。 - 按F2编辑当场并键入以下公式:
=EXPLODE_V($B$3;" ")
按Ctrl + Shift + Enter( 而不是通常的回车 ) -这将定义一个数组公式,并会导致{=EXPLODE_V($B$3;" ")}
周围括号(但不要手动键入他们!)。
原因是你的载体实际上被横向显示,如果创建一个数组公式水平,你会得到你的号码。 因为你有一个垂直矢量使用以下命令:
Function MYARRAY(x As Integer)
MYARRAY = Application.WorksheetFunction.Transpose(Array(10, 20, 30))
End Function
小区将不显示的阵列,则必须把这种阵列以在片材上的范围内/细胞的阵列。 或者,你可以尝试阵列转换为分隔的字符串,这可能是你不使用非常大的阵列,只要工作。
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