如何使用Excel统计某电话号码有多少人打过
一个朋友在调查一起案件的时候,遇到了一个如题的问题,请我帮忙。由于要保密他不能提供原始数据,只是给我谈了一下要求。目前他们通过一个嫌疑犯的通话记录,从通话记录中又列入了n个新嫌疑犯,而且也得到每个嫌疑犯的通话记录。现在就要将这些通话记录进行统计,即同一个电话号码,每个嫌疑犯打了多少次,有多少个嫌疑犯同时打过同一个号码。
根据上述总结,Excel表如下:

图一:原始数据表
图二:统计结果表
上图说明:
图一:用户一、用户二、用户三、用户四正面的数字为模拟的电话号码;方向是指主叫还是被叫,没有什么意义。
图二:用户正面的数字是该电话所使用的次数,如果一个电话只被某一用户打过,这样就不统计,换句话说就是统计结果表中的电话号码至少被两个以上的用户打过。
解决的思路:
⒈ 此统计无法使用函数、数据可视表等普通的方法来解决。我采用了VBA编程来实现的统计。
⒉ 首先将所有用户的电话(不重复,重复的只取一次),提取出来存放到统计结果表中。这样结果表中的电话是唯一的。
⒊ 通过结果表的电话号码为基础,统计每个用户使用该号码的次数并将统计的结果存放到结果表该用户下。
⒋ 删除同一个电话号码被两个以下用户使用的行。
解决的方法:
⒈ 因为用户的数量是未知的,但从第2列开始是已经的,这样我们就可以通过循环来进行统计。循环的条件通过第1行从第2列开始,单元格不空。
⒉ 每个用户的电话号码循环与⒈类似
具体的程序源代码如下:
Private Sub CommandButton1_Click()
Sheets(2).Rows(2 & ":" & 65536) = ""
Sheets(2).Columns("B:IV") = ""
Dim Ls, i, j, Isa, k, yhs
Isa = False
i = 2
If Sheets(1).Cells(1, 2) = "" Then
MsgBox "没有用户,无法统计!", vbOKOnly + vbCritical, "错误提示"
Exit Sub
Else
Do While True
If Sheets(1).Cells(1, i) <> "" Then
Sheets(2).Cells(1, i) = Sheets(1).Cells(1, i)
i = i + 1
Else
Exit Do
End If
Loop
yhs = i - 1
End If
Ls = 2
Do While Sheets(1).Cells(1, Ls) <> ""
i = 2
Do While Sheets(1).Cells(i, Ls) <> ""
If Sheets(2).Cells(2, 1) = "" Then
Sheets(2).Cells(2, 1) = Sheets(1).Cells(i, Ls)
Else
j = 2: Isa = False
Do While Sheets(2).Cells(j, 1) <> ""
If Sheets(2).Cells(j, 1) = Sheets(1).Cells(i, Ls) Then Isa = True: Exit Do
j = j + 1
Loop
If Not Isa Then Sheets(2).Cells(j, 1) = Sheets(1).Cells(i, Ls)
End If
i = i + 1
Loop
Ls = Ls + 1
Loop
Ls = 2
Do While Sheets(2).Cells(1, Ls) <> ""
i = 2
Do While Sheets(2).Cells(i, 1) <> ""
j = 2: k = 0
Do While Sheets(1).Cells(j, Ls) <> ""
If Sheets(2).Cells(i, 1) = Sheets(1).Cells(j, Ls) Then k = k + 1
j = j + 1
Loop
If k <> 0 Then Sheets(2).Cells(i, Ls) = k
i = i + 1
Loop
Ls = Ls + 1
Loop
'===========================================
' 删除非同一电话多个用户使用的行
'===========================================
i = 2
Do While Sheets(2).Cells(i, 1) <> ""
j = 2: k = 0
Do While j <= yhs
If Sheets(2).Cells(i, j) <> "" Then k = k + 1
j = j + 1
Loop
If CInt(k) < 2 Then
Sheets(2).Rows(i).Delete Shift:=xlUp '删除i行
Else
i = i + 1
End If
Loop
'===========================================
MsgBox "统计完毕!", vbOKOnly + vbInformation, "系统提示"
Sheets(2).Select
End Sub
相关文章

阳历/农历转换对照表怎么做? Excel制作日历表/万年历的最终版
想要制作阳历/农历转换对照表,,通过这个对照表,你只需知道阳历日期,就可以快速准确的找到对应的农历日期,下面我们就来看看详细制作方法2025-04-10
工作上需要制作一个日历表/万年历,该怎么制作呢?我们需要使用三个excel函数来实现,详细请看下文介绍2025-04-10
Excel中有一个功能非常强大的函数,它就是SUMPRODUCT函数,既能求和、计数、权重计算,还能排名等,今天我们就来看看Excel根据权重求和的技巧2025-04-10
tocol函数哪个版本能用? excel中tocol函数的两种高级用法
TOCOL函数公式非常强大,值得一学,从字面意义可以理解出来,它是将数据转换成一列的,今天分享TOCOL函数的2种高级用法2025-04-10
Excel隐藏行和折叠行有什么不同? 隐藏行和折叠使用方法和区别介绍
excel表格进行操作的时候,发现有隐藏和和折叠行,看上去效果一样,都隐藏了,但是两者是有很大区别的,详细请看下文介绍2025-03-21
Excel工龄计算不再愁! Excel隐藏函数DATEDIF轻松计算精确到天级的工龄
在日常工作中,我们经常需要计算员工的工龄,以便进行人事管理、薪资调整等工作,本文将详细介绍如何在Excel表格中计算工龄,并提供多种实用方法供您选择2025-03-13
Excel数据处理遇到的问题,99%都是由于奇葩的数据格式造成的,今天跟大家整理了几个Excel表格构建的规则,先不要问为什么,照着做就对了2025-03-06
Excel透视表1月到12月不能排序怎么办? 数据透视表日期无法排序解决方法
如图对数据透视表日期进行升序排序后,仍不是我们想要的结果,有可能月份是文本,不能排列,下面我们就来看看详细解决办法2025-03-06
首先咱们得明确一下账龄的概念,简单来说,账龄就是某个账户的余额从产生到现在的时间长度,比如,一年以内的账龄就是那些在过去一年内产生的债权或债务,下面我们就来看看2025-03-06
实现办公自动化! DeepSeek搭配Excel制作自定义按钮的技巧
DeepSeek生成想要的代码很方便,如果将生成的代码放到excel中作为vba代码使用,岂不是能实现办公自动化?下面我们就来看看实现方法2025-03-05



最新评论