有没有办法在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
似乎不起作用(类型不匹配错误)。
有什么想法吗?
答案 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