在VBA中添加或乘上变体

假设我们有两个变体, XY ,可能是数字,范围或数组。 是否有一种简单的方法来添加或乘以工作表公式=X+Y=X*Y

我想到的一种可能是使用Evaluate操作,如下所示:

 Dim X, Y Sub AddMult() Dim Add, Mult X = Array(Array(1, 3), Array(2, 4)) Y = Array(1, 2) Add = [GetX()+GetY()] Mult = [GetX()*GetY()] End Sub Function GetX() GetX = X End Function Function GetY() GetY = Y End Function 

这似乎有点尴尬。 任何其他的想法?

(下面是一个相关的问题: 将数组与标量相乘并添加到VBA中 。)

看了各种选项后,我已经解决了一个工作表function的方法。 算术计算最可行的候选人似乎属于财务类别。 当rate = 0时,从Excel帮助PV函数,参数之间存在以下关系: pmt * nper + pv + fv = 0 。 这个关系也适用于每个其他相应的function。 因此一个select是:

 Sub AddMult() Dim X, Y, Add, Mult X = Array(Array(1, 3), Array(2, 4)) Y = Array(1, 2) With Application Add = .Pmt(, -1, X, Y) Mult = .PV(, 1, .PV(, X, Y)) End With End Sub 

对于变体的其他操作,可以使用更多的WorksheetFunction方法:

 .SLN(x,y,1) 'xy .SLN(x,,y) 'x/y .Power(x,y) 'x^y .Quotient(x,y) 'x\y .Delta(x,y) 'x=y .GeStep(x,y) 'x>=y 

注意 :按Application前缀( 不适用于其他数据types的Worksheetfunction函数)。

提供的代码在一个模块中工作。 在那里函数GetX()和GetY()是UDF,所以[GetX()]和[GetY()]可以评估它们。 但是,那么你的代码可能是最好的解决scheme? 当然在全球范围内有两个UDF和两个variables。 但是另一个解决scheme试图避免这种情况,将会导致对变体真正包含的可能性进行无尽的检查。

进一步的testing表明,如果模块被声明为私有的,甚至可以对模块中的函数进行评估。 全球变数也不能公开。 所以我认为你的解决scheme最好的解决scheme。

 Private X, Y Sub AddMult() Dim Add, Mult X = [{4,5,6}] Set Y = Range("A1:C200") Add = [GetX() + GetY()] Mult = [GetX() * GetY()] End Sub Private Function GetX() GetX = X End Function Private Function GetY() GetY = Y End Function 

问候

阿克塞尔