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

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

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

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

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

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

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

写一个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了。

时间: 2024-08-10 10:35:34

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

SQL Server 2005中的分区表(三):将普通表转换成分区表(转)

在设计数据库时,经常没有考虑到表分区的问题,往往在数据表承重的负担越来越重时,才会考虑到分区方式,这时,就涉及到如何将普通表转换成分区表的问题了. 那么,如何将一个普通表转换成一个分区表 呢?说到底,只要将该表创建一个聚集索引,并在聚集索引上使用分区方案即可. 不过,这回说起来简单,做起来就复杂了一点.还是接着上面的例子,我们先使用以下SQL语句将原有的Sale表删除. --删除原来的数据表 drop table Sale 然后使用以下SQL语句创建一个新的普通表,并在这个表里插入一些数据. -

SQL Server 2005中的分区表(三):将普通表转换成分区表

在设计数据库时,经常没有考虑到表分区的问题,往往在数据表承重的负担越来越重时,才会考虑到分区方式,这时,就涉及到如何将普通表转换成分区表的问题了. 那么,如何将一个普通表转换成一个分区表 呢?说到底,只要将该表创建一个聚集索引,并在聚集索引上使用分区方案即可. 不过,这回说起来简单,做起来就复杂了一点.还是接着上面的例子,我们先使用以下SQL语句将原有的Sale表删除. [c-sharp] view plain copy --删除原来的数据表 drop table Sale 然后使用以下SQL语

使用Sql语句快速将数据表转换成实体类

开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare @TableName sysname = 'TableName' declare @Result varchar(max) = 'public class ' + @TableName + ' {' select @Result = @Result + ' public ' + ColumnType

mysql 5.1 升级编译安装5.6把原MyISAM表转换成InnoDB,并全局备份一次【原创】

mysql 5.1 升级编译安装5.6把原MyISAM表转换成InnoDB,并全局备份一次 1.[备份指定数据库]不要用逗号mydb hellodb [[email protected] ~]# mysqldump -uroot -p  --databases mydb hellodb  > /tmp/all.sql [修改ENGINE=MyISAM 为 ENGINE=InnoDB] [[email protected] home]# cp hellodb.sql hellodb.sql.bak

普通表转换成分区表

描述:将表trans_new转换成分区表,分区字段为data_date. 一.准备 SQL> select /*+ parallel(t,8)*/  count(*) from  trans_new t;   COUNT(*) ---------- 445600483 SQL> select /*+ parallel(t,8)*/  max(DATA_DATE),min(DATA_DATE) from  edw.dw_fact_trans_new2014 t; MAX(DATA_ MIN(DA

sql纵表转换成横表

数据库中 将一张纵表转换为一张横表 数据库纵表数据 sql语句如下 select cardid, max(case t.projectcode when 'IA-002' then t.result end) as ht, max(case t.projectcode when 'IA-003' then t.result end) as wt, max(case t.projectcode when 'IA-005' then t.result end) as bmi, max(case t.

转:excel表转换成word

我们在工作中会经常遇到这样的情况,有时候在excel编辑好的文档,想把里面的数据原封不动的放在word里面.通常我们最常用的就是用复制的方式,但是复制的方法虽然可以将数据移到过去,但是会将excel里面的格式弄乱.复制过去之后会很乱,没有整体感,如果自己再重新调整格式的话,不仅费时又费力,那么这时候我们就要考虑怎么将excel文档转换成word的格式. 百度经验:jingyan.baidu.com 工具/原料 word2007 excel2007 百度经验:jingyan.baidu.com 方

Mysql 表转换成 Sqlite表

目前的转换仅仅支持对没有外键的Mysql数据表 准备: 下载安装 Sqlite Expert 软件 一 获取Mysql中的.sql文件,获取过程省略可以直接导出sql文件 二 在Sqlite Expert 中新建数据库 三 在数据库中选中sql Tab,导入之前准备sql文件 四 关键步骤 将创建表的最后关于编码的sql语句一句primary key的语句删除 并在主键的创建是修改创建方法 将自动增长删除,这样说有点抽象,如下实例 这是mysql建表方式 CREATE TABLE `admin`

excel表转换成txt导入

insert into t_user(userid,username,usercard,corpid,roleid,phone,useradd,userpost,usermail,userpasswd,failtimes,userstate,authcode,workdate,passwddate) values('10010','羊羊一','','901080200','7','','','','','965EB72C92A549DD',0,'00','01',current timestam