早教吧 育儿知识 作业答案 考试题库 百科 知识分享

VBA统计0-9任意两个不同数字组成的次数从0-9中提取不同的两个数,且按升序排列,那么共有45组,现在有很多这样排列好的两个数字组合,每个组合已经用逗号隔开,最后一个组合后面也带逗号,要

题目详情
VBA统计0-9任意两个不同数字组成的次数
从0-9中提取不同的两个数,且按升序排列,那么共有45组,现在有很多这样排列好的两个数字组合,每个组合已经用逗号隔开,最后一个组合后面也带逗号,要求编写Function,统计这些组合出现的次数,次数放在小括号内,次数大的在前,次数相同的按升序排列,没有出现的计0次.例如Target为23,34,24,35,79,06,23,45,23,24,35,
那么通过Function ZuHe(Target)计算,得到的结果和格式是 23(3),24(2),35(2),06(1),34(1),45(1),79(1),01(0),02(0),……太多,这里省略…….78(0),89(0),
俺不会VBA,请编写完整的自定义函数,分随后奉上.
你的自定义函数不要用行号,列号,就用Function ZuHe(Target)这种形式.
▼优质解答
答案和解析
这纯粹是在写算法呀,与Excel没什么关系!写好了,用法如下:
=ZuHe(Range),Range为Excel中一连续区域,比如:=ZuHe(A1:B17).
如果你不是区域,而是一个字符串,那还得改程序,不过这不是难点.
Option Explicit
Option Base 1
Function ZuHe(MyRange As Range) As String
Dim BaseDate(45,2) As String,qty(45,2) As Integer,Group As Integer
Dim m As Range,i As Integer,j As Integer,isChange As Boolean
'初始化模板数组
'BaseDate:数据、序号; qty:序号、次数
Call iniBaseData(BaseDate,qty)
'统计所给数据的重复次数
For Each m In MyRange
For i = 1 To 45
If BaseDate(i,1) = m.Value Then
qty(i,2) = qty(i,2) + 1
Exit For
End If
Next i
Next m
'对结果排序,按次数从大到小排
For i = 1 To 44
For j = i + 1 To 45
If qty(i,2) < qty(j,2) Then
Call Swap(qty(i,1),qty(j,1))
Call Swap(qty(i,2),qty(j,2))
End If
Next j
Next i
'对结果排序,相同次数的按数值从小到大排
Group = 1
i = 2
Do
If qty(i,2) = qty(Group,2) Then
i = i + 1
Else
'找到相同组数据区域,再对区域进行排序
Call GroupSort(qty,Group,i - 1)
Group = i
i = Group + 1
End If
Loop While i