Excel VBA - 通过常量移动数字数组的值而不循环

时间:2013-08-29 05:08:00

标签: arrays excel vba excel-vba

有没有办法在Excel VBA(Excel 2007)中为数组添加常量而不进行循环?

例如,我有以下数组:

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

我想获得:

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

没有循环。

在电子表格中,如果值位于单元格A1:A5中,我可以选择B1:B5并输入数组公式{=A1:A5+1}

MyArray = MyArray + 1

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

嗯,这是一种欺骗行为:

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

答案 1 :(得分:1)

也许这会将数组增加一个:

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

<强>更新

这是一种更直接的方法,也允许递增2D数组

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

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

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

答案 2 :(得分:0)

这是一个用户定义的函数,可以帮到你。只需将参考单元格和增量值作为参数传递。

它不处理输入单元格中有字母的情况,因此您需要为此创建自己的处理或确保良好的数据。

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