excel vba函数返回数组并粘贴到工作表公式中
Posted
技术标签:
【中文标题】excel vba函数返回数组并粘贴到工作表公式中【英文标题】:excel vba function return array and paste in worksheet formula 【发布时间】:2018-04-05 12:22:49 【问题描述】:vba 函数是否可以返回数组值并使用 excel 公式粘贴到工作表中?
例如,我想在 Excel 单元格中写一个公式,比如 A1,例如 =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
【问题讨论】:
我相信,如果您返回一个数组,您必须选择多个单元格并按 shift-enter 才能获取所有这些值。您可以使用 index() 来获取数组中的特定值,例如:=INDEX(A1:A4,3) 阅读:cpearson.com/excel/arrayformulas.aspx 【参考方案1】:使用此代码:
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
【讨论】:
单元格范围(2 行 x 2 列)也被“锁定”,因此必须对范围内的所有单元格进行任何更改;您不能对单个单元格进行更改。 @Jeeped 查看我的EDIT#1 我不知道函数返回的行数。列数是预定义的。如何动态设置行范围? @siz 您将使用 Sub 而不是 Function。潜艇可以自行决定其输出的去向。 好的,我如何从 excel 公式中调用 sub?【参考方案2】:使用连接将数组转换为字符串,检查单元格属性>换行文本。然后你可以将数组填充到单个单元格中。
Value(0) = "somedata"
value(1) = "somedata"
GetData = Join(value, Chr(10))
P/s: Idk 如何加入二维数组
【讨论】:
以上是关于excel vba函数返回数组并粘贴到工作表公式中的主要内容,如果未能解决你的问题,请参考以下文章