【发布时间】:2021-04-11 14:55:42
【问题描述】:
我想编写函数 outliers_std(table, std) 用零替换异常值。
让我们将异常值定义为满足以下不等式的变量:
所以我想遍历整个表格,如果有任何元素满足上面的不等式,我想用 0 替换它。
我目前的工作
Function outliers_std(table As Variant, std As Double)
Dim row As Range
For Each row In [table].Rows
If Abs(table(row) - Application.WorksheetFunction.Average(table)) / Application.WorksheetFunction.StDev(table) > std Then
table(row) = 0
End If
Next
outliers_std = table
End Function
但是在尝试运行时
outliers_std(E10:E14,1)
E10:E14 是下面的数据
我收到错误#ARG!
你知道问题出在哪里吗?
编辑
我跑了代码
Function outliers_std(table As Variant, std As Double) As Variant
Dim row As Range
For Each row In [table].Rows
If Abs(row - Application.WorksheetFunction.Average(table)) / Application.WorksheetFunction.StDev(table) > std Then
table(row) = 0
End If
Next
outliers_std = table
End Function
而且错误仍然保持不变。我是不是写错了什么?
【问题讨论】:
-
哦,我改了。问题依旧
-
更新了我的问题 ;))
-
row现在本身就是一个范围。你可以用row而不是table(row)来调用它,表也应该是1 列引用。所以table As Range -
嗯,我不确定我是否理解。你能在回答中扩展这个吗?
-
^^^^ 所以这里使用数组变量^^^。