VBA 求数组中绝对值最大的元素并返回下标

Range("A1").FormulaArray = Application.WorksheetFunction.Match(Application.WorksheetFunction.Max(Abs(Arr)), Abs(Arr), 1)
Range("A2").Value = Max(Abs(Arr))
这样编有什么问题?

第1个回答  推荐于2016-01-31
For i = LBound(arr) To UBound(arr)
If abs(Mx) < Abs(arr(i)) Then Mx = arr(i): n = i
Next
'循环结束后Mx就是数组中绝对值最大的元素,n就是对应的下标追问

谢谢,有没有不用循环的解决方案呢,因为处理的数据有点多,用循环容易让EXCEl无响应。

追答

可以的。你是想处理单元格数据还是数组的?
你的数组有多大呢,一个单循环不会出现你担心的问题

追问

处理的数据量大约在两百万左右,用MAX函数和用循环那个快啊?

追答

我试了一下循环,300万的数组还不到1秒钟

本回答被提问者采纳
第2个回答  2014-05-23

两个问题:

    VBA 中的 ABS 函数只能接受任何有效的数值表达式,而不能应用于数组变量

    先假设 Abs(Arr)
     能够正常计算,那么Application.WorksheetFunction.Match(Application.WorksheetFunction.Max(Abs(Arr)), Abs(Arr), 1) 这个运算得出的是一个数值,可以直接赋值给 Range("A1"),不理解为何要用 FormulaArray 属性。

追问

嗯嗯,学习了,那么正确的代码应该是怎么样的?

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网