在调查一起案件时,派出所的一个朋友遇到了一个不整洁的问题,向我求助。因为他不能提供原始数据保密,他只是和我谈了要求。目前,通过一名嫌疑人的电话记录,他们从电话记录中增加了n名新嫌疑人,也拿到了每个嫌疑人的电话记录。现在需要统计这些通话记录,也就是同一个电话号码,每个嫌疑人打了多少次电话,有多少嫌疑人同时打了同一个号码。
根据以上总结,Excel表格如下:
图1:原始数据表的计算机教程
图2:统计结果表
上图:
图1:用户1、用户2、用户3、用户4正面的号码为模拟电话号码;方向是指主叫方还是被叫方没有意义。
图2:用户正面的数字是手机使用的次数。如果一个电话只有一个用户打过,就不算。换句话说,统计结果表中的电话号码已经被至少两个用户拨打过。
解决方案:
1.这一统计数据无法通过函数和透视表等普通方法解决。我用VBA编程实现了统计。
2.首先,提取所有用户的电话号码(不要重复,只取一次),存储在统计结果表中。这样,结果表中的电话号码是唯一的。
3.根据结果表中的电话号码,统计每个用户使用该号码的次数,并将统计结果存储在结果表中该用户下。
4.删除少于两个用户使用同一电话号码的线路。
解决方案:
1.因为用户数量未知,已经是从第二栏开始,这样我们就可以通过流通进行统计。循环的条件从第二列开始到第一行,并且单元格不为空。
1.每个用户的电话号码周期与1类似。
具体程序源代码如下:
私有子命令按钮1 _单击()
工作表(2)。行(2 ':' 65536)='
工作表(2)。列(' B:IV')=' '
Dim Ls,I,j,Isa,k,yhs
Isa=假
i=2
如果表(1)。单元格(1,2)=' '然后
MsgBox“没有用户,无法计数!”,vbOKOnly vbCritical,'错误提示'
出口接头
其他
做真实的事情
如果表(1)。单元格(1,I)' '然后
工作表(2)。单元格(1,i)=工作表(1)。细胞(1,I)
i=i 1
其他
退出Do
如果…就会结束
环
yhs=i - 1
如果…就会结束
Ls=2
当纸张(1)时进行。单元格(1,ls)' '
i=2
当纸张(1)时进行。单元格(I,ls)' '
如果表(2)。单元格(2,1)=' '然后
工作表(2)。单元格(2,1)=工作表(1)。细胞(I,ls)
其他
j=2: Isa=False
边做边用纸(2)。单元格(j,1)' '
如果表(2)。单元格(j,1)=工作表(1)。单元格(I,ls)然后Isa=True:退出Do
j=j 1
环
如果不是Isa,则表(2)。单元格(j,1)=工作表(1)。细胞(I,ls)
如果…就会结束
i=i 1
环
Ls=Ls 1
环
Ls=2
边做边用纸(2)。单元格(1,ls)' '
i=2
边做边用纸(2)。单元格(I,1)' '
j=2: k=0
当纸张(1)时进行。单元格(j,ls)' '
如果表(2)。单元格(I,1)=工作表(1)。单元格(j,ls)然后k=k 1
j=j 1
环
如果k 0,则工作表(2)。单元格(I,Ls)=k
i=i 1
环
Ls=Ls 1
环
'===========================================
删除不在同一电话上的多个用户使用的行
'===========================================
i=2
边做边用纸(2)。单元格(I,1)' '
j=2: k=0
当j=yhs时执行
如果表(2)。单元格(I,j)' '然后k=k 1
j=j 1
环
如果CInt(k) 2,那么
工作表(2)。行(一)。删除班次:=XLUP '删除I行。
其他
i=i 1
如果…就会结束
环
'===========================================
MsgBox“计数完毕!”,vbOKOnly vbInformation,'系统提示'
工作表(2)。挑选