加载中…
个人资料
whu_Paprika
whu_Paprika
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,291
  • 关注人气:24
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

初次体验excel宏语言心得

(2013-01-03 14:26:30)
标签:

excel

宏语言

分类: 技术
    前几天有别院学长询问我能不能帮他用excel做个简单表格,并且交代我说用宏语言是分分钟就能搞定的事情。于是我当时一口答应了。
http://s14/mw690/6ce23c39td25ca1d146bd&690→“宏语言算毛线,劳资毫无压力hohohoho~”

    当然因为自己以前从来没接触过宏语言,所以内心也有些许忐忑。
http://s15/mw690/6ce23c39td25ca29bdabe&690“第一次写宏语言,好害羞思密达”


    言归正传,表格的需求其实挺简单。分为sheet1和sheet2两个部分,在sheet2中有各个县城各种不同土壤类型所对应的面积的数据。需要在sheet1中做一个统计,把相同县城相同土壤类型的面积累加求和,存放到对应的区域。也就是下面这个样子:
    算法思想:使用循环遍历两个表格,找出两个表格中县城名字和土壤类型名称相同的区域,累加对应的土壤面积即可。

    接下来简单介绍下excel的宏:计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。Excel办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。
宏的用途是使常用任务自动化。虽然有些宏仅仅是记录键击或鼠标单击操作,但开发人员可以使用代码编写功能更强大的VBA

http://s10/mw690/6ce23c39td25cec8143c9&690→“看起来好高森的样纸”

excel的宏位于“视图”→“宏”里面,点击输入宏名称,便可以创建一个新的宏。
    接下来将算法用宏语言编写,宏语言跟其他语言大同小异,依样画葫芦很快就能完成。最后的正确代码如下:
http://s1/mw690/6ce23c39td25d09e318b0&690
    运行即可得到正确答案,整个过程真是一气呵成有木有。如果这样认为,那你真是图样图森破了。事实上这个简单的东西折磨了我四天。
http://s10/mw690/6ce23c39td25d135c9719&690→“这一股弱者的气息”

下面我分享我的失败经验:首先由于没有使用过宏,我对其数据处理方式并不了解。一开始我引用单元格数据都是直接用sheet.cell.value引用。结果运行程序后,excel直接“未响应”了。
http://s16/mw690/6ce23c39td25d2934fd9f&690→“呵呵”
    但是我是一个有节操有耐心的人,我硬是等着那个程序运行完了。整个过程耗时两个小时。呵呵。

    然后喜滋滋的一看,发现结果不对http://s4/mw690/6ce23c39td25d335368d3&690我掀桌。

    后来我觉得不可能每个程序都要运行两个小时啊,这样是不科学的。于是在excel里边注册了一个账号:****,以新人的姿态“不耻下问”,于是有了以下对话。
    虽然被人尽情的鄙视了,但是我终于知道了应该先把工作表中的数据存入数组变量里边后再运行程序,采用这个方法之后,果然程序在不到一分钟之内的时间里就有结果了,尽管结果还是错的。http://s12/mw690/6ce23c39t7b6fba3d527b&690

    所得到的结果中,有的县城能统计出正确数据,但是有的县城却没有统计到,数据全是0http://www/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif

    接下来的四天,我一直在吾日三省乎吾身,程序究竟是哪里出问题了呢。我首先想到了是for循环遍历的问题,于是询问实验室同学,大家一起讨论后觉得程序应该是对的。http://s4/mw690/6ce23c39td25d518dc213&690
    
    那么究竟程序错在哪里呢http://s10/mw690/6ce23c39td25d5ae0ccd9&690,我一度想放弃帮同学做这个表格。但是这样是十分不道德的,是男人就要担当!  
http://s4/mw690/6ce23c39td25d5e2a3123&690→“夜深人静,独自神伤”

    后来我尝试了很多方法,重新写循环,改变循环条件,甚至把数据都导入了买特来比(matlab)中处理。发现结果都是一样的不对。最后仿佛是一道神的光芒射中我的膝盖,我终于找到了错误的根本!原来是我在复制县名的时候,在某些后面多复制了两个空格,导致了整个程序出现这么离奇的错误。

    虽然因为这种低端错误而懊悔不已。anyway,程序出来了,可以交差了。我的心里还是有说不出的开心畅快的赶脚。好像多年的便秘一下子就治好了一样的舒适!
http://s7/mw690/6ce23c39td25d71a5efb6&690→“终于搞定,可以睡个好觉了”


PS:这个帖子中讲述了怎样提高excel宏运行效率的方法,值得一看 http://club.excelhome.net/forum.php?mod=viewthread&tid=362633 





0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有