Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
VBA函数,返回数组并根据数组维度自动填充范围_Vba_Function - Fatal编程技术网

VBA函数,返回数组并根据数组维度自动填充范围

VBA函数,返回数组并根据数组维度自动填充范围,vba,function,Vba,Function,我创建了一个函数,它返回一个数组,如下所示: Val0,0=你好 Val1,0=世界 所以我的数组是二维数组。 如果我把我的公式放在一个特定的单元格中,比如说=GetData 它只给我1个值,这是数组中的第一个值。 我知道当获取数组时,我应该选择一个范围,然后输入公式,然后按 CTRL+SHIFT+ENTER,这实际上是可行的 但是,我不知道是否存在这样的可能性,即仅选择1个单元格而不是范围,然后输入返回数组的公式,我希望根据数组维度自动填充单元格,因此用户无需选择范围并按CTRL+SHIFT+

我创建了一个函数,它返回一个数组,如下所示: Val0,0=你好 Val1,0=世界

所以我的数组是二维数组。 如果我把我的公式放在一个特定的单元格中,比如说=GetData 它只给我1个值,这是数组中的第一个值。 我知道当获取数组时,我应该选择一个范围,然后输入公式,然后按 CTRL+SHIFT+ENTER,这实际上是可行的

但是,我不知道是否存在这样的可能性,即仅选择1个单元格而不是范围,然后输入返回数组的公式,我希望根据数组维度自动填充单元格,因此用户无需选择范围并按CTRL+SHIFT+enter


非常感谢。

使用excel中的new=FILTER函数。这将在excel中返回1D或2D数组。不需要VBA。

Excel VBA不允许自定义项函数修改另一个单元格的值。唯一允许UDF做的事情是将值返回到调用它的单元格

所以,你尝试做的是不可能的

为了获得您需要的,不要使用UDF函数!我的意思是,不要从工作表中调用它

如果需要解决方法,可以尝试“工作表更改事件”,以更改某个特定单元格为目标,并生成代码,将数组放置在代码指示的位置

下一个例子就是这样做。您可以看到,1D数组也可以用于在以下范围内返回:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.address(False, False) <> "G1" Then Exit Sub
  If Target.Value = "Go" Then
    Dim arr(1 To 1, 1 To 2) As Variant, arr2 As Variant
     arr(1, 1) = "Hello": arr(1, 2) = "World"
     arr2 = Split("Hello World", " ")
     Target.Offset(, 1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
     Target.Offset(1, 1).Resize(1, UBound(arr2) + 1).Value = arr2
  End If
End Sub

为了使用它,您必须在存在上述事件的工作表上写下Go。我建议您以列表的形式验证单元格,提供Go,Nothing并使用它,将运行代码一次,而不是“Nothing”列表选项…

您的功能代码是什么?谢谢先生:非常感谢您的回答。我可能需要更改代码才能使用它。@Henjoe:很高兴我能帮上忙!但是,当这里有人给出一个完整的答案时,我们在这里勾选code left side check side复选框,使其成为可接受的答案。这样,其他搜索类似问题的人就会知道答案是有帮助的@亨乔:我编辑了答案,并提供了一个表单更改事件使用的示例……你好,伊恩,谢谢你的回答。这其实不是我想要的。正如@fanedure的回答,我想做的是不可能的。再次感谢分享。