在 VBA 中将范围传递给 ABS 函数

在 VBA 中将范围传递给 ABS 函数

我想执行如下功能

Selection.FormulaArray = "=GEOMEAN(ABS((C646:E646)))"

由于我的范围不断变化,我想将范围作为变量传递,如下所示

Range1 = Range("C646", Range("C646").Offset(0, 2)).Address(False, False)
Selection.FormulaArray = "=GEOMEAN(ABS(Range1))"

我收到错误 #NAME?

但如果我这样传递

x = Range("C646").Address(False, False)    
Y = Range("C646").Offset(0, 2).Address(False, False)    
Selection.FormulaArray = "=GEOMEAN(ABS((x:y)))"

我收到错误 #VALUE!

有人可以帮忙吗?

答案1

Selection.FormulaArray = "=GEOMEAN(ABS(Range1))"将代码中的该行替换为以下内容:

Selection.FormulaArray = "=GEOMEAN(ABS(" & Range1 & "))"

我还没有测试过,但这似乎是正确的。(注意:您的命名约定令人困惑,因为它Range1实际上是一个字符串而不是一个范围。)

答案2

防抱死制动系统只返回数字的绝对值,而不是范围。也许你想要艾维德夫函数返回数据点与其平均值的绝对偏差的平均值。

对于 GEOMEAN,您需要在代码中循环范围,将 ABS 应用于每个值并构建一个新的范围传递给函数。

或者根据这个StackOverflow 答案使用替代公式:

EXP(AVERAGE(LN(A1:A171)))

相关内容