当然是用数据库方便。如果不想用数据库,用下面的方法试试 :)Private Type EnumTelephone CallType As String TelephoneNumber As String End TypePrivate Type SumTelephone CallType As String TelephoneNumber As String CallTimes As Long End TypePrivate Function CountTelephone(ByRef eTelephone() As EnumTelephone, ByRef sTelephone() As SumTelephone) As Boolean Dim i As Long, n As Long Dim MixI As Long, MaxI As Long Dim FoundRecord As BooleanMixI = LBound(eTelephone) MaxI = UBound(eTelephone)Erase sTelephone ReDim Preserve sTelephone(0)On Error GoTo ErrHandlesTelephone(0).CallType = eTelephone(MixI).CallType sTelephone(0).TelephoneNumber = eTelephone(mix).TelephoneNumber sTelephone(0).CallTimes = 1If MixI + 1 <= MaxI Then For i = MixI + 1 To MaxI FoundRecord = False If eTelephone(i).TelephoneNumber <> "" And eTelephone(i).TelephoneNumber <> "" Then For n = LBound(sTelephone) To UBound(sTelephone) If eTelephone(i).TelephoneNumber = sTelephone(n).TelephoneNumber And _ eTelephone(i).CallType = sTelephone(n).CallType Then sTelephone(n).CallTimes = sTelephone(n).CallTimes + 1 FoundRecord = True Exit For End If Next If FoundRecord = False Then ReDim Preserve sTelephone(UBound(sTelephone) + 1) sTelephone(UBound(sTelephone)).TelephoneNumber = eTelephone(i).TelephoneNumber sTelephone(UBound(sTelephone)).CallType = eTelephone(i).CallType sTelephone(UBound(sTelephone)).CallTimes = 1 End If End If Next End IfCountTelephone = True Exit FunctionErrHandle: CountTelephone = False End FunctionPrivate Sub Command1_Click() Dim eT(18) As EnumTelephone Dim sT() As SumTelephone Dim i As LongeT(0).CallType = "被叫" eT(0).TelephoneNumber = "13089446120"eT(1).CallType = "主叫" eT(1).TelephoneNumber = "13089446120"eT(2).CallType = "主叫" eT(2).TelephoneNumber = "13089446120"eT(3).CallType = "被叫" eT(3).TelephoneNumber = "13089325257"eT(4).CallType = "被叫" eT(4).TelephoneNumber = "4336399789"eT(5).CallType = "被叫" eT(5).TelephoneNumber = "13089446120"eT(6).CallType = "主叫" eT(6).TelephoneNumber = "13089446120" If CountTelephone(eT(), sT()) Then For i = 0 To UBound(sT) Print sT(i).CallType + " "; Print sT(i).TelephoneNumber + "次 "; Print sT(i).CallTimes Next End If End SubPrivate Sub Form_Load() Me.AutoRedraw = True End Sub
导入数据库。用SQL语句统计。假设表名为DATA,里面有两个字段:CallType,TelephoneNumber SQL语句如下: select CallType,TelephoneNumber,count(*) as cNO from Data group by CallType,TelephoneNumber
CallType As String
TelephoneNumber As String
End TypePrivate Type SumTelephone
CallType As String
TelephoneNumber As String
CallTimes As Long
End TypePrivate Function CountTelephone(ByRef eTelephone() As EnumTelephone, ByRef sTelephone() As SumTelephone) As Boolean
Dim i As Long, n As Long
Dim MixI As Long, MaxI As Long
Dim FoundRecord As BooleanMixI = LBound(eTelephone)
MaxI = UBound(eTelephone)Erase sTelephone
ReDim Preserve sTelephone(0)On Error GoTo ErrHandlesTelephone(0).CallType = eTelephone(MixI).CallType
sTelephone(0).TelephoneNumber = eTelephone(mix).TelephoneNumber
sTelephone(0).CallTimes = 1If MixI + 1 <= MaxI Then
For i = MixI + 1 To MaxI
FoundRecord = False
If eTelephone(i).TelephoneNumber <> "" And eTelephone(i).TelephoneNumber <> "" Then
For n = LBound(sTelephone) To UBound(sTelephone)
If eTelephone(i).TelephoneNumber = sTelephone(n).TelephoneNumber And _
eTelephone(i).CallType = sTelephone(n).CallType Then
sTelephone(n).CallTimes = sTelephone(n).CallTimes + 1
FoundRecord = True
Exit For
End If
Next
If FoundRecord = False Then
ReDim Preserve sTelephone(UBound(sTelephone) + 1)
sTelephone(UBound(sTelephone)).TelephoneNumber = eTelephone(i).TelephoneNumber
sTelephone(UBound(sTelephone)).CallType = eTelephone(i).CallType
sTelephone(UBound(sTelephone)).CallTimes = 1
End If
End If
Next
End IfCountTelephone = True
Exit FunctionErrHandle:
CountTelephone = False
End FunctionPrivate Sub Command1_Click()
Dim eT(18) As EnumTelephone
Dim sT() As SumTelephone
Dim i As LongeT(0).CallType = "被叫"
eT(0).TelephoneNumber = "13089446120"eT(1).CallType = "主叫"
eT(1).TelephoneNumber = "13089446120"eT(2).CallType = "主叫"
eT(2).TelephoneNumber = "13089446120"eT(3).CallType = "被叫"
eT(3).TelephoneNumber = "13089325257"eT(4).CallType = "被叫"
eT(4).TelephoneNumber = "4336399789"eT(5).CallType = "被叫"
eT(5).TelephoneNumber = "13089446120"eT(6).CallType = "主叫"
eT(6).TelephoneNumber = "13089446120"
If CountTelephone(eT(), sT()) Then
For i = 0 To UBound(sT)
Print sT(i).CallType + " ";
Print sT(i).TelephoneNumber + "次 ";
Print sT(i).CallTimes
Next
End If
End SubPrivate Sub Form_Load()
Me.AutoRedraw = True
End Sub
SQL语句如下:
select CallType,TelephoneNumber,count(*) as cNO from Data group by CallType,TelephoneNumber