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就是对应的下标追问
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 属性。
嗯嗯,学习了,那么正确的代码应该是怎么样的?
本回答被网友采纳