实战:单元格处理应用举例 - 范文中心

实战:单元格处理应用举例

01/06

掌握了Excel中最常见的range对象的属性和方法过后,再利用上VBA里的判断和循环控制结构语句,我们就可以自己慢慢解决一些小的需求了。

今天A哥就带大家从实例出发,来把我们之前学习的知识给串起来。

案例:删除零值单元格所在行,在一个range区域,如果有任何一个单元格的值为零值,则删除本行。数据大家可以自行举例,可以使用rand函数配合int函数来随机生成含有零值的区域。

在解决实际需求前,我们都需要拟定大体的思路。对于这个问题,我们很直观的可以想到:遍历每一个单元格,判断如果是零的话,就删除行。

那么,我们可以写这样一个程序:

Sub delete_zero()Dim Rng As RangeDim i%, j%, Row_Num%, Col_Num%Row_Num = Range('a1').CurrentRegion.Rows.CountCol_Num = Range('a1').CurrentRegion.Columns.CountFor i = 1 To Row_Num    For j = 1 To Col_Num        If Cells(i, j).Value = 0 Then            Cells(i, j).EntireRow.Delete            Exit For        End If    NextNextEnd Sub

个中的逻辑也很简单,利用i循环行,j循环列。如果单元格的数值为0,那么就删除这行,并不再执行列的循环,跳出来继续执行行的循环。

看起来不错,运行一下看看吧!

F5结果执行如下图

等等,怎么里面还有零?

我们的逻辑似乎没有问题,但我们在执行过程中没有考虑excel删除行的执行方式问题。一般来说,执行行删除操作,下面的行会自动上移。因此,执行过一次行删除之后,每一行的行号相对于原始表已经发生了变化,自然会漏删一些行。

解决方法很简单,只要把行的循环进行倒序删除就可以。

Sub delete_zero()Dim Rng As RangeDim i%, j%, Row_Num%, Col_Num%Row_Num = Range('a1').CurrentRegion.Rows.CountCol_Num = Range('a1').CurrentRegion.Columns.CountFor i = Row_Num To 1 Step -1    For j = 1 To Col_Num        If Cells(i, j).Value = 0 Then            Cells(i, j).EntireRow.Delete            Exit For        End If    NextNextEnd Sub

F5运行看看,结果里面还有0吗?

这个需求的解决,到这里,似乎是结束了,然而并没有。我们刚才处理的是很小一部分数值,这种循环方式速度也还可以,但如果是大量数据,例如1000 行呢?

我们用上述方式,对1000 行数据进行了处理,处理时间为0.71秒,如果是处理10000条数据岂不是要更长?

有没有更快的运行方式呢?

我们再仔细观察一下上面的代码,我们发现,Excel每发现一行,就要执行一次删除操作,这会相当浪费时间。可不可以一次性把发现的单元格都删除呢?

这就要用到我们之前将的union方法了。

修改后的代码如下:

Sub delete_zero_new()Dim Rng As RangeDim i%, j%, Row_Num%, Col_Num%Row_Num = Range('a1').CurrentRegion.Rows.CountCol_Num = Range('a1').CurrentRegion.Columns.CountFor i = Row_Num To 1 Step -1    For j = 1 To Col_Num        If Cells(i, j).Value = 0 Then            If Rng Is Nothing Then                Set Rng = Cells(i, j)            Else                Set Rng = Union(Rng, Cells(i, j))            End If            Exit For        End If    NextNextRng.EntireRow.DeleteSet Rng = NothingEnd Sub

这里要注意的是object的使用。

一定要用set来给object赋值。例如这里,如果只写rng=cells(i,j),像函数那样赋值,则会出现对象错误报错。要改成 set rng =rn

在判断是否为nothing的时候需要用is,而不是用=。

改进了代码之后,F5运行程序只需要0.32秒,是不是比之前快了很多?

根据以上这个案例,我们可以直观的得到一个经验:在处理大量数据的时候,要尽量减少excel的固有操作,如select, activate, delete等等,这样可以大大提高运行速度。

总结一下:

使用for来遍历所有单元格

使用一次性excel操作,避免多次重复操作


相关内容

  • 计算机应用基础课程excel综合实训材料
    第1章 O ffice Excel 2010高级应用技术 1.1学生成绩管理 一.考查知识点 数据清单.格式设置.公式与函数.排序.筛选.分类汇总和图表等级知识,利用多种公式和函数对单元格中的数据进行运算:对各种数据可以进行格式设置:分析汇 ...
  • 六年级品社第一.二单元
    第一单元 我们爱和平 第1课 不平静的世界 1.要和平.求合作.促发展已成为时代的主旋律. 2.在人类社会发展中,常会伴随着(不和谐)的音符,各种(战争).(冲突)时有发生.战争与和平问题关系着人类的生存和命运,和平稳定.和谐发展是人类进步 ...
  • [高效团队建设与管理]
    <高效团队建设与管理> 讲师:邱柏森 情境1:不管您如何强调团队合作精神,可是部门之间团队成员之间的"本位主义"仍有增无减,在业绩 与竞争的压力下,难以发挥更高的团队作用. 解答: 如何建立团队愿景与目标,如 ...
  • 初中化学各单元教学反思汇总
    教 学 反 思 反思一. <化学使世界变得更加绚丽多彩>一课的教学反思 良好的开端是成功的一半,做为与学生见面的第一堂课,往往牵动学生的心.<化学使世界变得更加绚丽多彩>是九年级化学第一单元课题一的内容,即绪言,可以 ...
  • 桑拿电话销售培训
    桑拿电话销售培训 2010年12月24-25日 上海 [主办单位]百乔罗管理咨询(上海)有限公司 [培训对象]呼叫中心电话销售代表.团队长.质检师.培训师,企业销售经理及主管.销售代 表等. [培训费用]1800元(含资料费.午餐费.专家演 ...
  • 精装修项目管控
    "精装修是怎样炼成的?"目录提纲 一. 精(全)装修的概念及背景 1. 精装修概念介绍以及宏观政策指向 全装修究竟是什么?全装修≠毛坯房+精装修,全装修是一项系统工程: 全装修在国民经济发展.在住宅产业化(国内.外)背景 ...
  • 重大危险源分级规范
    重大危险源分级规范 目 次 前言 ---------------------------------------- Ⅱ 1 范围 --------------------------------------- 1 2 规范性引用文件 --- ...
  • 微电子技术发展现状与趋势
    ppt文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. 微电子技术的发展 主要内容 微电子技术概述: 微电子发展历史及特点: 微电子前沿技术: 微电子技术在军事中的应用. 2010-11-26 北京理工大学微电 ...
  • 嵌入式控制系统备考资料
    1.嵌入式处理器分类: 答:微处理器(Microprocessor Unit, MPU) 微控制器(Microcontroller Unit, MCU) 片上系统(System On Chip) 2.嵌入式系统的设计有很多要求,主要体现在哪 ...
  • 客户服务技巧培训
    客户服务技巧培训 客户服务技巧培训讲师程子展认为,当企业之间在产品质量.售后服务.品牌.价格四大领域的竞争达到同一水平.几乎没有多大区别时,企业要想赢得竞争的优势,只有通过自身的努力把服务做得更好,比别的企业更有特色,更能吸引客户. 客户服 ...