码迷,mamicode.com
首页 > 移动开发 > 详细

VBA 把电信的电话费用表转换成部门电话费用明细表

时间:2014-11-12 16:39:05      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   for   数据   on   2014   问题   log   

今天同事要做一个这样的工作,就是把电信发来的费用表,转换成按部门划分的电话费用表,100多部电话,如果一个个去核对,真还是需要些时间的。问题来了,有更好的方法么,我们来看一下。

电信公司给的费用明细是这个样子的,单个号码与费用合计并不在一起。

bubuko.com,布布扣

先通过Excel的筛选功能,去掉号码的空格行,这样把号码和费用放的近一点,因为中间的数据行数不是固定的,这样至少只差一行,就好办多了。

由于错开一行,把费用行数据整体剪切上移一行即可与号码在同一行。再把没有用的行列删除即可。

bubuko.com,布布扣

这是转换后的结果,如A列和C列。由于部门费用表中并没有区号显示,所以两者进行对接需要对号码进行处理一下,这不把A列截取右边8位即可。有一个宽带号码特殊的情况,需要手动处理一下。


bubuko.com,布布扣

这个就是部门费用表,上面的数据需要对应号码更新费用到下面这个表里面。原来的两张费用表用着不方便先放到一个Sheet中,这样查找起来方便多了。

bubuko.com,布布扣

写一个VBA的程序,对整理的号码进行循环,然后在部门号码表里查找,找到的话就将右边的值进行替换。这里面进行了一个出错的处理,否则如果不处理的话有找不到号码的时候就会报错而执行不下去。

Sub getDate()

    On Error Resume Next                                         '不报错继续执行
    
    For cln = 1 To 147
            PhoneNumber = Sheets("sheet1").Cells(cln, 2)
            money = Sheets("sheet1").Cells(cln, 3)
                   
          
            Dim rng As Range
            Set rng = Worksheets("总公司").Range("E1:E187").Find(PhoneNumber, , , 1)
           
           ' MsgBox (rng.Address)
            
            rng.Offset(0, 1).Value = money                        '向右偏移一列即为费用值
    
            If Err.Number = 0 Then

                Sheets("sheet1").Cells(cln, 4) = "OK"             '成功标识
                
            End If
            
            If Err.Number <> 0 Then

                Sheets("sheet1").Cells(cln, 4) = "Error"          '错误标识,重点查看即可
                Err.Number = 0
            End If
    Next

End Sub
程序都执行完了,再核对一下,对特殊的几个号码再处理一下就OK了。

VBA 把电信的电话费用表转换成部门电话费用明细表

标签:blog   http   ar   for   数据   on   2014   问题   log   

原文地址:http://blog.csdn.net/upi2u/article/details/41043523

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!