Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays excel vba函数返回数组并粘贴到工作表公式中_Arrays_Excel_Vba_Function_Formula - Fatal编程技术网

Arrays excel vba函数返回数组并粘贴到工作表公式中

Arrays excel vba函数返回数组并粘贴到工作表公式中,arrays,excel,vba,function,formula,Arrays,Excel,Vba,Function,Formula,vba函数是否可以返回数组值并使用excel公式粘贴到工作表中 例如,我想在excel单元格中编写一个公式,比如A1 like=GetData,然后按enter键。它返回4个度量,并填充A1:A4、B1:B4单元格 我尝试将Variant和Collection作为返回类型。值在那里,但它只填充第一个单元格 Function GetData(Input1 As Range) As Variant Dim value() As Variant value(1, 1) =

vba函数是否可以返回数组值并使用excel公式粘贴到工作表中

例如,我想在excel单元格中编写一个公式,比如A1 like=GetData,然后按enter键。它返回4个度量,并填充A1:A4、B1:B4单元格

我尝试将Variant和Collection作为返回类型。值在那里,但它只填充第一个单元格

Function GetData(Input1 As Range) As Variant       
    Dim value() As Variant
    value(1, 1) = "somevalue"
    value(1, 2) = "somevalue"
    ............
    value(2, 2) = "somevalue"

    GetData = value
End Function
使用此代码:

Function GetData() As Variant
    Dim value(1 To 2, 1 To 2) As Variant
    value(1, 1) = "1;1"
    value(1, 2) = "1;2"
    value(2, 1) = "2;1"
    value(2, 2) = "somevalue"
    GetData = value
End Function
选择单元格D1至E2;然后在公式栏中单击;然后输入:

=getdata()
作为数组公式:

数组公式必须使用Ctrl+Shift+Enter键输入,而不仅仅是Enter键。如果操作正确,公式将显示在公式栏中,并在其周围用大括号括起来

编辑1:

正如Jeeped所指出的,一旦以这种方式输入了数组中的公式,数组中的单个单元格就无法自行更改。因此:

Range("D1").Clear
将失败。您需要:

Sub poiuyt()
    Dim r As Range, r2 As Range

    Set r = Range("D1")
    Set r2 = r.CurrentArray
    r2.Clear
End Sub

使用“连接”将数组转换为字符串,请选中“单元格属性>换行文本”。然后可以将数组填充到单个单元格

Value(0) = "somedata"
value(1) = "somedata"
GetData = Join(value, Chr(10))

p/s:Idk如何加入二维数组

我认为如果返回数组,则必须选择多个单元格并按shift键enter键才能获得所有这些值。您可以使用索引来获取数组中的特定值,例如:=INDEXA1:A4,3读取以下内容:单元格2行乘2列的范围也会被“锁定”,因此必须对该范围内的所有单元格进行任何更改;您不能对单个单元格进行更改。@请参见我的编辑1我不知道函数返回的行数。列数是预定义的。如何设置行范围动态?@siz您将使用子对象而不是函数。sub可以自行决定其输出的位置。好的,如何从excel公式调用sub?