跳过数组中的列

我有一个VBA函数返回一个数组在Excel中显示。 数组的前两列包含不需要显示的ID。

有什么办法可以修改Excel公式来跳过前两列,而不必返回去创build一个VBA助手去除列?

公式看起来像这样,括号让数组跨越单元格跨度显示:

{=GetCustomers($a$1)} 

Excel对内置数组操作最接近的是“INDEX”函数。 在你的情况下,如果你的'GetCustomers'例程返回的数组是单行的,如果你知道它是多长时间(我猜你已经把它放到表单中),你可以得到你想要的通过做这样的事情:

 =INDEX(GetCustomers($A$1),{3,4,5}) 

所以说GetCustomers()返回数组{1,2,“a”,“b”,“c”},上面只会返回{“a”,“b”,“c”}。

不过,有很多方法可以让你不必input你的索引数组。 例如,

 =COLUMN(C1:E1) 

将返回{3,4,5},您可以使用它:

 =INDEX(GetCustomers($A$1),COLUMN(C1:E1)) 

不过,这个技巧并不适用于真正的二维数组。 如果你在正确的位置传入一个零,'INDEX'将会返回一整行或一列,但是我不知道如何使它返回一个2-D子集。 编辑:你可以做到这一点,但它很麻烦。 说你的数组是2×5,而你想要最后三列。 你可以使用:

 =INDEX(GetCustomers($A$1), {1,1,1;2,2,2}, {3,4,5;3,4,5}) 

(进一步编辑:chris neilsen提供了一个很好的方法来计算他的答案中的这些数组。

查尔斯·威廉姆斯在他的网站上有一个链接,这里解释更多关于如何使用数组

http://www.decisionmodels.com/optspeedj.htm

他在回复这个问题时提到:

是否有数组参数调用的内置Excel函数的行为的任何文档?

就个人而言,我使用VBA辅助函数来处理这样的事情。 有了正确的库例程,你可以做一些事情:

 =subseq(GetCustomers($A$1),3,3) 

在一维情况下,或者:

 =hstack(subseq(asCols(GetCustomers($A$1)),3,3)) 

在二维情况下,这更清楚。

最简单的解决办法就是隐藏前两列

另一个可能是使用OFFSET来调整返回的数组大小
语法是

 OFFSET(reference,rows,cols,height,width) 

我build议修改'GetCustomers'函数以包含一个可选的布尔variables来告诉函数返回所有的列,或者只是单列。 这将是最干净的解决scheme,而不是试图在公式方面处理它。

 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 Function 

您可以使用INDEX函数从返回数组中提取项目
– 公式在单元格B2开始的范围内

 {=INDEX(getcustomers($A$1),ROW()-ROW($B$2)+1,COLUMN()-COLUMN($B$2)+3)}