如何返回数组中的array()函数在单元格中使用数组公式(matricial公式):用于在多单元格中分割texte
我正在写一个函数在VBA中在Excel公式中使用,没关系,如果我的函数返回一个单一的值:
=MYVALUE(A1)
现在我写了另一个函数返回一个数组(1,2,3,4,…),我用数组公式replace我的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
- select区域
C3:C7
这定义了vector的方向。 - 按F2进行编辑并键入以下公式:
=EXPLODE_V($B$3;" ")
-
按CTRL + SHIFT + ENTER ( 通常ENTER的 INSTEAD ) – 这将定义一个ARRAY公式,并将导致
{=EXPLODE_V($B$3;" ")}
括号(但不要手动input)。
原因是你的vector实际上是水平显示的,如果你创build一个水平的数组公式,你会得到你的数字。 对于你有一个垂直向量使用以下内容:
Function MYARRAY(x As Integer) MYARRAY = Application.WorksheetFunction.Transpose(Array(10, 20, 30)) End Function
单元格不会显示数组,您必须将该数组翻译为表单上的单元格范围/数组。 或者,您可以尝试将数组转换为分隔string,只要不使用非常大的数组,就可能工作。
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