繁体   English   中英

将数组从Excel VBA函数传递到电子表格

[英]Passing arrays from an Excel VBA function to a spreadsheet

我已经多次将数组从电子表格来回传递给VBA函数。 我最近“升级”到Excel 365,现在无法正常工作。 例如:

Public Function test(x As Range)
  Dim y()
  ReDim y(3)
  y(1) = 1
  y(2) = 2
  y(3) = 3
  test = y
End Function

然后,我突出显示三个单元格,例如b1:b3,然后在顶部单元格中输入= test(a1:a2)并按shift键输入。 这用应该从测试函数接收y()的数组公式填充范围。

但是,引用该函数的单元格全为零。 我放入调试行,我可以告诉该函数正在按预期运行。 只是没有将数组传递给电子表格。

那是怎么回事? 有没有其他人有这种经验?


@ RDHS,@ tim-williams和@ garys-student-感谢您提出的即刻答复。 还有加里(Gary)的学生-感谢您的迅速回复。 我会投票给所有人,但我不能,因为我是菜鸟。

但是...出于完整性的考虑-您的答案提出了另一个问题(属于理论上的问题):我应该能够将一维数组直接强制转换为范围列,反之亦然。

显然,检查范围的形状并进行相应的转换很容易(嗯,既然您已经向我展示了操作方法,这很容易!)但是它太草率了:

使用上面的示例,而不仅仅是编写test = y

我需要写:

如果x.rows.count = 1,则测试= y
否则test = worksheetfunction.transpose(y)结束,如果

我不认识你,但我会乘1号门(test = y)。 另一种方法是马虎马虎。

但是MS一直在支持我们-当使用内置电子表格数组功能(例如索引,匹配等)时,excel不会强迫您进行这些体操操作。Index(C1:C10,3)和index(a3:k3, 3)都返回C3中的值,这是每个ARRAY中的第三个ITEM。 索引足够聪明,可以找出第三项。 当然,如果您可以在工作表上执行此操作,那么必须在VBA中找到一种方法?

我最喜欢的比较 科学 这位教授是计算机科学领域的奠基人之一。他曾经说过:“一种编程语言,如果程序中的程序需要引起人们的关注,那么它就是低级的。”

他实际上做了很多有见地的观察,并在ARPANET上发布,使他成为世界上第一批博客作者(Google Alan Perlis)之一。 二十年来,每个程序员在他的VT100上都贴有Perlisisms列表-例如:

  • “在计算中,将显而易见的东西变成有用的是'挫折'一词的活泼定义”;

  • “一个人的常数就是另一个人的变量”;

  • “愚人忽视了复杂性。实用主义者遭受了它的侵害。有些人可以避免它。天才将其消除。”

我之所以提出他,是因为产生“干净”代码的愿望可以追溯到第一台计算机上的第一批编码人员。 我非常喜欢他。

试试看:

Public Function test(x As Range)
  Dim y()
  ReDim y(3)
  y(0) = 1
  y(1) = 2
  y(2) = 3
  test = WorksheetFunction.Transpose(y)
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM