dim a(100-1) as long dim i as long, j as long for i=0 to 99 a(i) = 采集数据 for j=i+1 to 99 '用以采集的数循环填充满 100 个成员 a(j) = a(j mod i) next cell("A1") = AVG(a) nextfunction AVG(a() as long) as double dim b() as long dim i as long dim sum as long b = sort(a) '复制一个数组并排序 for i= 20 to 79 sum = sum + b(i) next avg = sum / 80 end function
这样做: 1 排序采用 ListBox 控件,设置成 Visual = False, Sorted = True。 2 将你轮询得到的数据顺序存放一个数组中。Dim a(1 To 3200) As Long, i As Integer, j As Integer Dim sum As Double, avg(1 To 32) As DoubleFor i = 1 To 32 List1.Clear For j = i To 3200 Step 32 List1.AddItem Right("0000000" & Hex(a(j)), 8) Next j sum = 0 For j = 10 To 89 sum = sum + Val("&H" & List1.List(j)) Next j avg(i) = sum / 80 Next i
不好意思,应该用 a(j) = a(j mod (i+1))不知道你采集的次序如何: 如果是采集完一个通道(100个值)再处理下一个通道,只要在 for i=0 to 99 外面再套一个按通道的循环; 如果是所有通道取完第一个值再处理下个值,如下修改: Type data a(100 - 1) As Long End TypeSub Main() Dim channels(32 - 1) As data Dim i As Long, j As Long, c As Long For i = 0 To 99 For c = 0 To 31 channels(c).a(i) = 采集数据(c) For j = i + 1 To 99 '用以采集的数循环填充满 100 个成员 channels(c).a(j) = channels(c).a(j Mod (i + 1)) Next cell("R1C" & c) = Avg(channels(c).a) Next Next End Sub排序过程随便用冒泡或快排之类的算法,唯一区别是先复制数组作为结果已保证已采样值位置不变。
dim i as long, j as long
for i=0 to 99
a(i) = 采集数据
for j=i+1 to 99 '用以采集的数循环填充满 100 个成员
a(j) = a(j mod i)
next
cell("A1") = AVG(a)
nextfunction AVG(a() as long) as double
dim b() as long
dim i as long
dim sum as long
b = sort(a) '复制一个数组并排序
for i= 20 to 79
sum = sum + b(i)
next
avg = sum / 80
end function
1 排序采用 ListBox 控件,设置成 Visual = False, Sorted = True。
2 将你轮询得到的数据顺序存放一个数组中。Dim a(1 To 3200) As Long, i As Integer, j As Integer
Dim sum As Double, avg(1 To 32) As DoubleFor i = 1 To 32
List1.Clear
For j = i To 3200 Step 32
List1.AddItem Right("0000000" & Hex(a(j)), 8)
Next j
sum = 0
For j = 10 To 89
sum = sum + Val("&H" & List1.List(j))
Next j
avg(i) = sum / 80
Next i
如果是采集完一个通道(100个值)再处理下一个通道,只要在 for i=0 to 99 外面再套一个按通道的循环;
如果是所有通道取完第一个值再处理下个值,如下修改:
Type data
a(100 - 1) As Long
End TypeSub Main()
Dim channels(32 - 1) As data
Dim i As Long, j As Long, c As Long
For i = 0 To 99
For c = 0 To 31
channels(c).a(i) = 采集数据(c)
For j = i + 1 To 99 '用以采集的数循环填充满 100 个成员
channels(c).a(j) = channels(c).a(j Mod (i + 1))
Next
cell("R1C" & c) = Avg(channels(c).a)
Next
Next
End Sub排序过程随便用冒泡或快排之类的算法,唯一区别是先复制数组作为结果已保证已采样值位置不变。