当前位置:首页>>软件教程>>办公软件>>新闻内容  |虚拟主机 主机托管
Excel统计某电话号码有多少人打过
作者: 发布时间:2006-8-22 10:37:29 | 【字体:
    派出所的一个朋友在调查一起案件的时候,遇到了一个如题的问题,请我帮忙。由于要保密他不能提供原始数据,只是给我谈了一下要求。目前他们通过一个嫌疑犯的通话记录,从通话记录中又列入了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

文章来源:天极网
·Excel2007公式常见显示错误原因与解决
·用Shift键轻松把Excel表格转换为图片
·Excel使用中常被忽略的10条实用技巧
·Excel中只打印图表以外区域技巧
·Excel和Word表格奇偶行交错着色
·彻底隐藏Excel工作表
·解决无法直接打开Excel的XLS文件
·Excel中用右键拖移实现快速复制
·Excel 2007完成多人协同录入工作
·Excel中巧用右键拖移实现快速复制
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我