4

有没有办法在 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

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

有任何想法吗?

4

3 回答 3

2

嗯,这是一种作弊:

a = Array(1, 2, 3, 4, 5)
Range("a1:e1") = a
b = Evaluate("=a1:e1+1")
于 2013-08-29T06:31:37.140 回答
2

也许这会将数组增加一:

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)     
于 2013-08-29T15:48:26.280 回答
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
于 2013-08-29T15:34:10.340 回答