Function Test() '请将光标停留在这里并按 F5 键运行 Debug.Print cgStDev1(1, 2, 3, 4) Debug.Print cgStDev2(Split("1,2,3,4", ",")) Debug.Print cgStDev3(1, 2, 3, 4) End Function '=========================================================== ' 过程及函数名: cgStDev1 ' 版本号 : 1.0 ' 说明 : 本函数作用:根据固定的4个参数,计算出该参数 ' 的样本标准差。 ' 优点:可以满足本示例,而且计算速度快 ' 缺点:参数数量固定,无法通用 ' 引用 : ' 输入参数 : 4个参数,表示样本数值 ' 输出值 : Double ' 返回值 : -- ' 调用演示 : cgStDev1 1,2,3,4 ' (或请直接看 test 过程。) ' 最后修改日期: 2007-03-16 14:22:00 ' 示例地址 : http://access911.net/?kbid;72FABE1E14DCECF3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : access911@gmail.com ' 版权 : 作者保留一切权力, ' 请在公布本代码时将本段说明一起公布,谢谢! '=========================================================== Function cgStDev1(ByVal f1 As Double, _ ByVal f2 As Double, _ ByVal f3 As Double, _ ByVal f4 As Double) As Double cgStDev1 = (((f1 - (f1 + f2 + f3 + f4) / 4) ^ 2 + (f2 - (f1 + f2 + f3 + f4) / 4) ^ 2 + (f3 - (f1 + f2 + f3 + f4) / 4) ^ 2 + (f4 - (f1 + f2 + f3 + f4) / 4) ^ 2) / (4 - 1)) ^ 0.5 End Function '=========================================================== ' 过程及函数名: cgStDev2 ' 版本号 : 1.0 ' 说明 : 本函数作用:根据传入的数组变量计算出该参数 ' 的样本标准差。 ' 优点:参数数量不固定 ' 缺点:无法直接在 SQL 语句中调用字段名 ' 若不符合条件则打印出错条件后直接退出函数 ' 引用 : ' 输入参数 : 数组变量 ' 输出值 : Double ' 返回值 : -- ' 调用演示 : cgStDev2(split("1,2,3,4",",")) ' (或请直接看 test 过程。) ' 最后修改日期: 2007-03-16 14:22:00 ' 示例地址 : http://access911.net/?kbid;72FABE1E14DCECF3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : access911@gmail.com ' 版权 : 作者保留一切权力, ' 请在公布本代码时将本段说明一起公布,谢谢! '=========================================================== Function cgStDev2(ByVal arrF As Variant) As Double Dim n As Long Dim xBar As Double Dim xSigema As Double Dim i As Long '求样本数量 If IsArray(arrF) = True Then n = UBound(arrF) Else Debug.Print "not array" Exit Function End If n = n + 1 '因为默认数组是从 0 开始的,所以要 +1 才是统计学上的n If n = 1 Then '如果只有一个数字无法计算样本标准差 Debug.Print "#DIV/0!" Exit Function End If '求样本平均值 For i = 1 To n xBar = xBar + arrF(i - 1) Next xBar = xBar / n 'Debug.Print xBar '求分母 For i = 1 To n xSigema = xSigema + (arrF(i - 1) - xBar) ^ 2 Next cgStDev2 = (xSigema / (n - 1)) ^ 0.5 End Function '=========================================================== ' 过程及函数名: cgStDev3 ' 版本号 : 1.0 ' 说明 : 本函数作用:根据传入的不确定数量的参数计算 ' 样本标准差。 ' 优点:参数数量不固定,可直接在 SQL 中使用 ' 缺点:效率不高 ' 若不符合条件则打印出错条件后直接退出函数 ' 引用 : ' 输入参数 : 数组参数 ' 输出值 : Double ' 返回值 : -- ' 调用演示 : cgStDev3(1,2,3,4) ' (或请直接看 test 过程。) ' 最后修改日期: 2007-03-16 14:22:00 ' 示例地址 : http://access911.net/?kbid;72FABE1E14DCECF3 ' 作者 : cg1 ' 网站 : http://access911.net ' 电子邮件 : access911@gmail.com ' 版权 : 作者保留一切权力, ' 请在公布本代码时将本段说明一起公布,谢谢! '=========================================================== Function cgStDev3(ParamArray Items()) As Double Dim n As Long Dim xBar As Double Dim xSigema As Double Dim i As Long '求样本数量 If IsArray(Items) = True Then n = UBound(Items) Else Debug.Print "not array" Exit Function End If n = n + 1 '因为默认数组是从 0 开始的,所以要 +1 才是统计学上的n If n = 1 Then '如果只有一个数字无法计算样本标准差 Debug.Print "#DIV/0!" Exit Function End If '求样本平均值 For i = 1 To n xBar = xBar + Items(i - 1) Next xBar = xBar / n 'Debug.Print xBar '求分母 For i = 1 To n xSigema = xSigema + (Items(i - 1) - xBar) ^ 2 Next cgStDev3 = (xSigema / (n - 1)) ^ 0.5 End Function |