vb实现类似excel的Trimmean函数

yyyrrr51 2010-12-08 06:17:19
如果用vb实现如excel的Trimmean函数

语法形式为TRIMMEAN(Array,Percent)
rray为需要进行筛选并求平均值的数组或数据区域,Percent为计算时所要除去的数据点的比例。
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyyrrr51 2010-12-08
  • 打赏
  • 举报
回复
那有没有更合理的算法
LinkSe7en 2010-12-08
  • 打赏
  • 举报
回复
这种函数很简单啊。。。。。。。。
yyyrrr51 2010-12-08
  • 打赏
  • 举报
回复
Private Function GetAverage(Source() As Single, n As Integer) As Single '去除最大最小n个数求平均值
InsertSort Source
Dim i As Integer, Sum As Single
Dim k As Integer
'--0的个数-----
Dim n0 As Integer '为0
Dim nn0 As Integer '不为0
n0 = 0
nn0 = 0
For i = LBound(Source) To UBound(Source)
If Source(i) = 0 Then
n0 = n0 + 1
End If
Next
'-----------
For k = n0 + n To UBound(Source) - n
Sum = Sum + Source(k)
nn0 = nn0 + 1
Next
If nn0 > 0 Then
GetAverage = Sum / nn0
Else
GetAverage = -1
End If
End Function
Private Sub InsertSort(Source() As Single) '由小到大排序
Dim i As Long, j As Long, k As Long, c As Long
Dim tmpArr() As Single
ReDim n(LBound(Source) To UBound(Source)) As Single
c = LBound(Source)
For i = LBound(Source) To UBound(Source)
For j = LBound(Source) To c - 1
If Source(i) <= n(j) Then Exit For
Next
For k = c - 1 To j Step -1
n(k + 1) = n(k)
Next
n(j) = Source(i)
c = c + 1
Next
For i = LBound(Source) To UBound(Source)
Source(i) = n(i)
Next
End Sub

Private Sub Command1_Click()

Dim c(10) As Singlec(0) = 2
c(1) = 8
c(2) = 2
c(3) = 3
c(4) = 4
c(5) = 0
c(6) = 0
c(7) = 2
c(8) = 0
c(9) = 0
c(10) = 0
Text1.Text = GetAverage(c, 1)
End Sub

写了一个,得出2.75
dbcontrols 2010-12-08
  • 打赏
  • 举报
回复
VBA的函数可以直接使用
yyyrrr51 2010-12-08
  • 打赏
  • 举报
回复
而且数组里有0不列入平均值计算

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧