Excel VBA – 将一个数组数组的值移动一个常数而不循环

有没有一种方法可以添加一个常数到Excel VBA(Excel 2007)中的一个数组数组没有循环?

例如,我有以下数组:

MyArray = (1,2,3,4,5) 

我想获得:

 MyArray = (2,3,4,5,6) 

没有循环。

在电子表格中,如果值位于单元格A1:A5 ,则可以selectB1:B5并input数组公式{=A1:A5+1}

 MyArray = MyArray + 1 

似乎不起作用(types不匹配错误)。

有任何想法吗?

也许这个增加一个数组:

 v = Array(1, 2, 3, 4, 5) With Application v = .MMult([{1,1}], .Choose([{1;2}], v, 1)) End With 

更新

这是一个更直接的方法,也允许增加二维数组

 v = Application.Standardize(v,-1,1) 

工作表函数方法提供了大量的math函数,但以下是我可以find的基本算术在参数和返回值中支持VBA数组的唯一可行选项:

 (uv)/w = .Standardize(u,v,w) -u*v -w = .Fv(0,u,v,w) int(u/v) = .Quotient(u,v) 

那么,这是一种作弊:

 a = Array(1, 2, 3, 4, 5) Range("a1:e1") = a b = Evaluate("=a1:e1+1") 

这是一个用户定义的函数,可以为你做的伎俩。 只需传递引用单元格和增量值作为参数。

它不处理在input单元格中有字母的情况,所以您需要创build自己的处理或确保良好的数据。

 Function udf_IncrementArrayByVal(cellRef As Range, increment As Double) Dim tempStr As String Dim splitArray() As String Dim cntr As Long Dim arrayLength As Long tempStr = Replace(Replace(cellRef(1, 1).Value, ")", ""), "(", "") splitArray = Split(tempStr, ",") For cntr = 0 To UBound(splitArray) splitArray(cntr) = splitArray(cntr) + increment Next cntr tempStr = "(" + Join(splitArray, ",") + ")" udf_IncrementArrayByVal = tempStr End Function