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