我有一个VBA函数,它返回一个要在Excel中显示的数组。数组的前两列包含不需要显示的ID。
有没有办法修改Excel公式以跳过前两列,而无需返回创建VBA帮助器来剥离这两列?
公式如下所示,其中的括号允许数组跨一系列单元格显示:
{=GetCustomers($a$1)}发布于 2011-03-11 03:41:12
Excel中最接近内置数组操作的是“INDEX”函数。在您的例子中,如果您的'GetCustomers‘例程返回的数组是单行,并且您知道它有多长(我猜您知道,因为您正在将它放入工作表中),则可以通过执行以下操作来获得您想要的结果:
=INDEX(GetCustomers($A$1),{3,4,5})因此,假设GetCustomers()返回数组{1,2,"a","b","c"},上面只返回{"a","b","c"}。
不过,有多种方法可以省去输入索引数组的麻烦。例如,
=COLUMN(C1:E1)将返回{3,4,5},您可以改用它:
=INDEX(GetCustomers($A$1),COLUMN(C1:E1))然而,这种技巧不适用于真正的二维数组。如果你在正确的地方传入一个零,‘'INDEX’会返回一整行或一整列,但我不知道如何让它返回一个二维子集。编辑:你可以这样做,但它很麻烦。假设您的数组是2x5,您想要最后三列。您可以使用:
=INDEX(GetCustomers($A$1), {1,1,1;2,2,2}, {3,4,5;3,4,5})(进一步编辑: chris neilsen在他的答案中提供了一种计算这些数组的很好的方法。)
Charles Williams在他的网站上有一个链接,在这里解释了更多关于使用这样的数组的内容:
http://www.decisionmodels.com/optspeedj.htm
他发布了一个帖子,在回答这个问题时我问:
Is there any documentation of the behavior of built-in Excel functions called with array arguments?
就我个人而言,我使用VBA帮助器函数来做这样的事情。使用正确的库例程,您可以执行以下操作:
=subseq(GetCustomers($A$1),3,3)在一维情况下,或者:
=hstack(subseq(asCols(GetCustomers($A$1)),3,3))在2-D的情况下,这要清楚得多。
发布于 2011-03-11 02:43:54
最简单的解决方案是只隐藏前两列
另一种方法是使用OFFSET调整返回数组的大小
语法是
OFFSET(reference,rows,cols,height,width)发布于 2011-03-11 03:34:16
我建议将'GetCustomers‘函数修改为包含一个可选的布尔变量,以告知该函数返回所有列,或仅返回单个列。这将是最干净的解决方案,而不是试图在公式端处理它。
Public Function GetCustomers(rng as Range, Optional stripColumns as Boolean = False) as Variant()
If stripColumns Then 'Resize array to meet your needs
Else 'return full sized array
End If
End Functionhttps://stackoverflow.com/questions/5264082
复制相似问题