楼主 raulerini |
时代在飞速发展,EXCEL从我最先开始接触到的EXCEL2003已经发展到最新的EXCEL2010版本了。EXCEL2010固然强大了许多:再也不用忍受2003那灰不溜秋的菜单栏了,能做许多炫目的3D图表了,行列数多的可以媲美一个中型数据库了…….但我今天想讲的知识就是一个关于EXCEL2003的功能(至少大部分的知识都是基于2003的)。或许你会感到疑惑:掌握2003中的过时的技巧有用吗?呵呵,我可以很负责任的告诉你,有用!非常有用,古人有云:技术会过时,而知识永远不会过时。说不定,你看完我的文章,会有一股重新找excel2003安装盘的冲动呢? 或许你又会问:EXCEL2003还有什么功能2010里面做不到的吗?没错!的确有,并且是一个非常强大的功能,那就是EXCEL2003中的脚本编辑器。 还是从一个很实用的例子开始说起吧: 例1:[批量替换批注] 某工作表中有大量的批注,每个批注的作者都是raulerini,现要批量将raulerini替换为Exceltip。 我知道你想做什么,你想按CTRL+H替换对不对?没成功?那就ALT+F11打开VBE编辑器,什么for each cm in activesheet.comments,然后来加个if判断……最后调试,改错,再调试,运行。哈哈,最终大功告成! 如果我告诉你太复杂,只要你上面的步骤多按一个shift键,30秒就能搞定!不信????那我演示给你看。 步骤:
操作图示: 看了上面这么精简的解法,你是不是又有了一股想重新找出EXCEL2003安装盘的冲动?可是你却还舍不得在你的硬盘腾出一部电影的空间?好吧,那我再大费口舌举另一个常见的例子好了。 例2:[批量更改上下标] 工作表中无规律的分布着很多ExcelTip这个单词,现在想将Tip三个字母设置为下标。应该如何操作? 我知道你又想按ALT+F11开始写VBA代码了!不是告诉过你吗,你少按了一个shift键。 解法:
又是30秒的事情!何必非要用到sub,非要用到循环,非要用到判断呢? 操作图示: 好吧,或许你已经下定决心删掉一部电影来重装EXCEL2003了,不管那部电影是经典的泰坦尼克或同样经典的3DXX团。我必须承认你这个做法是相当正确的,既然2010和2003能在同一块硬盘中井水不犯河水,几百M的容量的"损失"还是相当值得的! |
2楼 raulerini |
恩,或许你还是不愿意为这偶尔暂时的快捷支付几百M的容量,或许公司限制的厉害没办法随便安装。好吧,那我就讲些2010里面也能用的到得东西(当然2007也能用) 例3:[批量更改上下标] 与例题2相同,但是唯一的一点改变在于数据不是零散分布而是位于同一列的,要求将Exceltip中的tip设置为下标。 你还想用VBE?说了不让那么复杂嘛!继续脚本吧 步骤:
操作图示: 记住上面的4步,一录二拷三粘再粘,因为我们后面会多次用到。 当然相对于例2,数据只能在同一列(你说这不是真美妙废话,不同列的情况下你给我输入公式试试!)。 搞了这么老半天,举了这么多例子,上面的那个函数,那些代码到底是什么意思呢?我们不能只知其然不知其所以然吧? 好吧,老实说,其实我也不是很懂!(你大叫道:什么!你不懂还在这里侃侃而谈!)。我只能大概的说,这是一个html语言的写法,html语言我没学过(当然,计算机方面的东西我都没系统的学过,本人非电脑专业出身,从事的也非计算机方面的工作,亦未受过任何专业之电脑培训,呵呵,每次给同事解决不出问题就以这个理由来搪塞),但大概来说,html一种标记语言,使用标记标签来标记元素。标记标签通常用一对"<>"包围。一般标记标签是成对出现的,比如 <b> 和 </b> ,前面的是开始标签,后面的是结束标签。但html语言也允许只有开始标签而省略闭合标签(当然这样写是不规范的)。 html中的<table>用来标记一个表格,而<tr>用来标记表格中的一行,<td>用来标记一个单元格。这样你就容易理解上面这段函数的意思了。 对比上面的函数,我们最终得到的函数结果实际上是生成了这样一串字符串,每个字符串的含义如下: |
3楼 raulerini |
例4:[隐藏部分文字] 趁热打铁,我们来做一道相似的题目,一列单元格中有部分文字,例如,我们有一些选择题,但其包含答案。要将答案部分隐藏掉。 步骤:
后面的步骤我就不再重复了,一录二拷三粘再粘。 操作图示见下: 这里我们又学会了一个标签<font>,这个标签主要是要来设置字体的,当然字体设置包括字体名称<font face>(注意不要想当然的以为名称就是name!这里是face),字体大小<font size>,字体颜色<font color>等等,例如,我们要设置字体为隶书,24号字,颜色为黄色,则代码为<font face=隶书 size=24 color=yellow>,注意每个属性间是以空格隔开的。 html代码的书写比较自由,引号可加可不加,例如上面的代码, face=隶书 与 face='隶书'(加单引号) 以及face="隶书"(加双引号),这三种代码都是正确的 那如果要设置字体的下划线及粗斜体呢?注意,这个与VBA不同的,下划线及粗斜体并不是<font>对象内部的属性了,而是单独的有专门的标签,例如粗体<b></b>,斜体<i></i>,下划线<u></u>,如果我们将字设为粗斜体加下划线,正确的标签写法是<u><i><b>test</b></i></u> 最后还要废话一句,上面的3个标签中,哪个写在前面哪个写在后面是没有区别的,即没有一定的先后顺序。但是,要注意的是,闭合标签的顺序要依照开始标签的顺序来决定,即最先开始的标签最后闭合,如上面的<u>最先开始,所以最后闭合的一定是</u>标签,顺序搞反了可就没了对称美咯,嘿嘿。 另外一些有用的标签: <td bgcolor></td>这个标签是<td>对象的一个属性(background color,背景色,简写bgcolor),用来设置单元格背景色,即填充色,例如将当前单元格背景色设置为黄色<td bgcolor=yellow>test</td>。记得我之前写过一篇文章,是写在EXCEL2003中如何根据当前单元格的值填充不同的背景色,现在因为2010的条件格式已经突破了3种的限制,这个问题已经变得很好解决了,但是在2003下,用条件格式+自定义格式都没办法解决的问题却可以用脚本+函数来解决。 <sub></sub>下标,<sup></sup>上标,这个上面已经讲过并举例了 <table border></table>设置表格的边框,例如设置表格边框线粗为3代码为<table border=3></table>。这个本人觉得实际用处不大。 设置拼音<ruby></ruby>以及<rt></rt>这两组标签是用来设置拼音的,例如<table><tr><td><ruby>中国<rt>zhongguo</rt></ruby></font>,设置单元格的内容为中国,同时设置其拼音为zhongguo,大家可以在excel中试验一下,本人觉得这个也是个比较有用的标签,之前我曾写过用脚本批量隐藏数据的7种方法,这也是其中一个比较有用且简便的方法。 通常情况下,我们需要将上面的代码与函数结合起来运用,而经常运用到得函数一般有:left、right、mid、substitute、replace、if、lookup,choose等等。 好吧,相信我讲了这么多,你应该能应付一些单元格设置上的小问题了,的确,脚本在对单元格进行批量设置的时候有其独特的优势。 |
4楼 raulerini |
下面我们再来讲点复杂的:正则表达式 听到上面这5个字,有的人立马眼冒金星晕晕沉沉了吧,不错,其实正则表达式我也只是略懂、略懂。但不得不说,正则表达式的确是一个非常有用的工具,仅仅略懂也能受益颇多了。 可能有的人还在晕乎:不是讲脚本吗?怎么转了这么大个弯忽然绕到正则表达式中去了?小乐你的思维也太能漂了吧? 我说莫急莫急,我现在正要讲的就是正则表达式在脚本中的运用呢。 Excel的确是好用,但是查找替换功能却是它的一块短板,甚至于有的时候我们不得不将excel中的文字复制到word中去进行替换,例如我们要查找前面是汉字后面是字母的单元格,或者是我们在替换的时候要替换诸如"A*B"的内容为"A*D"?你能怎样将其中的通配符"*"在替换中保留下来? 不要企图跟我谈VBA,这里只讨论技巧,何况VBA中的正则表达式也简单不到那里去。 啰啰嗦嗦了这么多,那EXCEL中到底有没有类似正则表达式的功能呢?至少也得跟word中的查找替换相差不多吧? 呵呵,又得再向你推销一下EXCEL2003了(电影删掉了吗?重装2003了吗?),装好了???那我们正式开始。 还是从上面的例4开始谈起,例4中我们所有的数据都在同一列,所以我们能轻松的用函数解决,但是,如果数据是零散分布在不同的列呢?如果我们要隐藏题目中的答案又当如何? 例5:[部分数据的隐藏] 数据表中零散的分布着许多选择题,要将题目中的答案部分隐藏掉,应当如何操作? 步骤:
操作图示: 仍然是经典的三步:一打开二替换三刷新,但是由于替换的内容复杂了点。 这里我简单讲讲上面表达式的意思。 如上图,整个表达式就是为了查找用括号包围的ABCDE中的一个或者多个字母,因为括号本身也是正则表达式中的一个标记符号,所以括号前面用"\"转义符号强制显示,最后,整个表达式用"{}"大括号包围起来,以便在替换的时候利用 替换框中,前面一部分的<font>代码我就不再啰嗦,中间的\1,代表的就是查找框中用大括号标起来的部分,Word中也有类似的功能 上面就是一个简单的正则表达式的例子,看,look,瞧,是不是也就那么回事? |
5楼 raulerini |
当然正则表达式的内容博大精深,要完全正握并不是我一幅图就能解决的问题,好好的自己钻研才是学习的正确方法。 再来举一个正则表达式应用的例子, 例6:[匹配汉字和字母] EXCEL中有大量的数据,其中很多都是前半部分是汉字,后面是字母,现需要保留前半部分的汉字,去除掉字母(即汉字与字母分离) 用普通的替换打死也弄不出来吧,好,请出脚本编辑器 步骤: 一打开二替换三刷新,我这里只给出替换的内容 查找框中:\>{:Id+}[A-Za-z]+ 替换为\>\1 图示如下: 简单说明下上述表达式的意思,:Id代表的是汉字,{:Id+}代表的是1个或多个汉字,并标记为表达式1,[A-Za-z]+ 代表是所有的字母集合,数量也是1个或者多个,最前面的\>相信大家也清楚了,转义符"\"强制显示后面的">"符号,而这个">"代表的是脚本标签"<td>"中最后的">"符号 整个表达式的意思是,查找单元格中汉字在前,字母在后的表达式,替换为前面的汉字。 需要说明的是:这里的正则表达式的语法与VBA中引用的regexp语法貌似有些不一样,例如,这里可以用:Id代表汉字,但VBA中并没有此类的表示方法 好吧,正则表达式我也不准备再深入了,知道这个原理,知道三个步骤,自己研究研究下正则表达式的语法,以后就不用每次将EXCEL里面的内容拷到word中又拷回来了。 关于脚本和正则表达式,我之前还发过一个帖子,是整理选择题的。也值得一看。 选择题的快速整理 http://www.exceltip.net/thread-21482-1-1.html |
6楼 raulerini |
我们再回归到函数上来,讲更多适用于2010版本的用法。 前面已经讲了很多关于单元格处理的例子了,现在举一个批量插入图片的例子。这个例子也可以充分体现脚本语言的强大之处。 例7:[批量插入图片] A列有一些人名,例如amulee,rongjun等等,在我的电脑中有这些人名对应的头像图片,也是以amulee.jpg,rongjun.jpg命名,现需要将图片插入对应的人名所在的行。 公式:(步骤我就不再啰嗦了,函数法是4步,谨记!)
操作见下图: 这里又引入了一个<img>标签,作用是用来定义图片的。 脚本还能干什么呢?能合并单元格吗,我们试试吧。 例8:[批量合并单元格] A列有一些数据,需要将A列的数据相同的合并在一起 公式:
操作见下图。 这里主要用到了单元格<td>的rowspan属性,指的是单元格的行跨度(姑且这么翻译吧),即一个单元格占了多少行,说白了也就是要合并几行为一个单元格。通过countif函数计算要合并的行数,最终形成指定的行合并在一起 |
7楼 raulerini |
至此,脚本中经常用到的大部分内容我都讲完了。最后讲一个复杂点的。这个也是我研究了比较久的一个例子。 例9:[批量自定义格式] A列中有一些分数,需要将这些分数根据分数的高低分别显示为"A","B","C","D","E"五档,但是改变的只是单元格的显示,本身单元格的值仍然不变,可以照常的参与加减乘除运算等,即需要自定义格式。 我们知道,自定义格式中可以用比较符号,但是,只能分为3档,如何将A列中的5档数据分别显示为"A","B","C","D","E"呢? 公式:
这个公式够头大的了吧。粗略分析下该公式,该公式不同于以前的部分在于,在<table>标签外面多了一个<html……..>标签,这个是用来定义一个namespace的,而<td>标签中,style='mso-number-format:定义了该单元格的自定义格式,再往后面,两对\0022实际上代表的就是"“”"引号,因为公式中不能嵌套引号所以用\0022代替,至于lookup公式部分不解释也罢。 操作图解: 这个公式也有许多很实际的用处,例如,在单元格中需要显示的是公式的过程,例如,单元格中显示5+9+3,表示一个单元格如何累加的过程,但同时又希望该单元格能直接参与运算,那么就可以用上述的批量自定义格式的方法来解决。 当然,脚本还有一些其他很实用的用处,例如对工作表进行排序,快速行列转换,批量增加数据有效性,批量插入复选框,批量建立超链接等等。这些我之前都有发过相关的帖子,有兴趣的朋友可以搜索研究一下。 |
8楼 raulerini |
后记:距离我上一次写脚本的帖子已经一年多了,这一年多以来,已经习惯打开的是2007或者2010的界面了。今天自己整理一下,发现原来脚本还真的这么好用。同时偶要感谢柳柳对偶滴鼓励和大力支持 |
9楼 君柳 |
脚本还可以批量修改超链接、批量。。用处大大的。10里没有脚本编辑器真有些郁闷呢 |
10楼 sjz76meizi |
|
11楼 lrlxxqxa |
小乐好强大,仰望 |
12楼 zzmxy |
xml一直都是一个不敢接触的领域啊原来xml也不过如此~~~太给力了! |
13楼 水星钓鱼 |
牛人。膜拜 |
14楼 ym_tang1225 |
太高深了 |
15楼 余方方 |
|
16楼 xpm130 |
仰望~~~ 开眼界!!! |
17楼 無心 |
收藏,学习 |
18楼 herelazy |
真的很强大啊! |
19楼 chenguanghui |
还没有使用过脚本编辑器呢 |
20楼 い卋玑┾宝珼 |
太给力了,此帖必需MARK |
21楼 小志就是我了 |
强大,学习了。 |
22楼 wise |
重新翻开学习 |
23楼 yeminqiang |