我正在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
答案 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
C3:C7
,这将定义矢量方向。=EXPLODE_V($B$3;" ")
按 CTRL + SHIFT + ENTER ( INSTEAD的常用 ENTER ) - 这将定义一个ARRAY公式,并在其周围生成{=EXPLODE_V($B$3;" ")}
括号(但不要手动输入!)。
答案 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