chrisfang的Excel大全
  • 【2013图表样式】使用说明

    2012-07-19

    这是来自未来的图表,幸运的你现在就能享用到这一切。

     

    【2013图表样式】使用说明

     

    微盘下载:http://vdisk.weibo.com/s/8_uyI/1342702157

    本地下载:2013图表样式工具 (2574)

    有部分用户在其他地方下载此插件以后安装时Excel会报错,可以在上面这个链接里重新下载,这个链接当中的程序已修复上述错误。

     

    操作演示:

                                 
    作者: chrisfang | 分类: ExcelVBA程序 | 阅读: 5,600 次浏览 | Tags:
  • Excel 2013 函数早知道

    2012-07-17

    Office 2013 客户预览版(Customer Preview)在今天正式发布,新版本的Office在很多方面都有了新的变化。其中Excel 2013新增了50多个新函数,从今天开始,我将对其中的一些新增函数陆续进行介绍并附上应用实例。这个系列的名称就叫做“Excel 2013 函数早知道”,希望通过这个系列能让你先人一步尽快掌握新版Excel的函数新特性,在使用时更加得心应手。

    注意:以下内容均属独家原创,如需转载请注明作者署名并注明来源。

    1,FORMULATEXT

    类型:查询引用类

    功能:返回单元格内的公式文本

    语法:FORMULATEXT(reference)

    应用:

    假定C4单元格中使用了公式,在另一个单元格中输入下面这个公式就可以在此单元格中返回C4单元格的公式内容,返回数据类型为文本字符串:

    这个功能在现有版本中(Excel 2003~2010)需要宏表函数GET.CELL才能实现,现在可以用这个函数完全取代(不再需要定义名称和启用宏)。在一些对公式进行讲解和演示的场景中,这个函数可以用于展示单元格中所使用到的具体公式。

    Excel 2013 函数早知道

    2,ISFORMULA

    类型:信息类

    功能:判断单元格中的内容是否是公式

    语法:ISFORMULA(reference)

    应用:

    使用下面的公式可以判断C4单元格中的内容是否为公式,是则返回True,否则返回False:

    在现有版本中(Excel 2003~2010),可以通过信息类函数判断单元格中的内容是否是文本(ISTEXT/ISNONTEXT)、数值(ISNUMBER)、错误值(ISERR/ISERROR/ISNA)、引用(ISREF)、空值(ISBLANK)、逻辑值(ISLOGICAL)、奇偶性(ISEVEN/ISODD)等等。现在这个新增的函数可以判断单元格内容是否是公式,又一次壮大了信息类函数家族。

    Excel 2013 函数早知道

     

    3,WEBSERVICE

    类型:网络类

    功能:通过网络连接直接获取数据

    语法:WEBSERVICE(url)

    应用:以下公式可以通过链接地址直接获取当前美元兑换人民币的汇率(100人民币兑换美元数)

    =WEBSERVICE("http://api.liqwei.com/currency/?exchange=CNY|USD&count=100")

    这个函数应该是2013版本中功能最吸引人的函数之一,一个可以衍生出无数妙用的函数。“Web类函数”是Excel 2013版本中新增的一个函数类别,目前只包含3个函数,这个是其中之一。它可以通过网页链接直接用公式获取数据,无需编程无需启用宏,只要联网就可以。

    在现有版本中(Excel 2003~2010),可以使用Excel从网页导入数据或通过编程从Web服务器获取信息,而现在,通过函数公式就可以直接获取网页数据,这是一个重大的改进。可以预见未来,类似Google翻译、天气查询、股票汇率等等网络应用都可以很方便地直接使用公式就能在Excel当中实现数据落地(例如上面例子当中所使用的Web链接就是一个获取实时汇率的API)。

      Excel 2013 函数早知道

     

    4,FILTERXML

    类型:网络类

    功能:在XML结构化内容中获取指定格式路径下的信息

    语法:FILTERXML(xml, xpath)

    应用:使用以下公式可以获取北京当前的气温(摄氏度)读数:

    =FILTERXML(WEBSERVICE("http://www.google.com/ig/api?weather=Beijing"),"//current_conditions/temp_c/@data")

    FILTERXML 函数也是2013版本中新增的“Web类函数”中的一员,可以结合另一个Web类函数WEBSERVICE函数一起使用,如果WEBSERVICE所获取到的是XML格式的内容,则可以通过这个函数直接从XML的结构化信息中直接过滤出目标数据。

    函数的第一个参数xml需要指定目标xml格式文本,第二个参数xpath则是需要查询的目标数据在xml中的标准路径。

    如果你曾经还在编程调用DOM,用着SelectNodes语句,那现在一切都变得简单多了!

    Excel 2013 函数早知道

     

    5,ENCODEURL

    类型:网络类

    功能:对URL地址(主要是中文字符)进行UTF-8编码

    语法:ENCODEURL(text)

    应用:使用以下公式生成谷歌翻译的网址(将“你”翻译成英文):

    ="http://translate.google.cn/?#zh-CN|en|"&ENCODEURL("你")

    ENCODEURL 函数也是2013版本中新增的“web类函数”中的一员,它可以将包含中文字符的网址进行编码,例如上面这个例子当中将“你”进行了编码所形成的网址可以直接打开谷歌的翻译页面。当然也不仅仅局限于网址,对于使用UTF-8编码方式对中文字符进行编码的场合都可以适用。以前在VBA网页编程中也许需要自己编写函数来实现这个编码过程,现在有了这个工作表函数可以直接实现。

    Excel 2013 函数早知道

     

    作者: chrisfang | 分类: Office2013 | 阅读: 8,512 次浏览 | Tags:
  • 记录清单比对的常用技巧

    2012-05-30

    经常被人问到怎么对两份数据进行比对,提问的往往都很笼统,其实比对有很多不同的情况,一两句话很难说清楚,所以还是写些详细的文字来说明吧。

    在工作中,有时候会需要对两份内容相近的数据记录清单进行比对,需求不同,比对的的目标和要求也会有所不同。下面根据几个常见的不同场景介绍一下Excel当中清单比对查找的技巧。

    场景1,比对取出两表的交集(相同部分)

    记录清单比对的常用技巧

     

    Sheet1中包含了一份数据清单A,sheet2中包含了一份数据清单B,要取得两份清单共有的数据记录(交集),也就是要找到两份清单中的相同部分。

    方法1:高级筛选

    高级筛选是处理重复数据的利器。

    选中第一份数据清单所在的数据区域,在功能区上依次单击【数据】——【高级】(2003版本中菜单操作为【数据】——【筛选】——【高级筛选】),出现【高级筛选】对话框。

    在对话框中,筛选【方式】可以根据需求选取,例如这里选择“将筛选结果复制到其他位置”;【列表区域】就是之前所选中的第一份数据清单A所在的单元格区域;【条件区域】则选取另外那份清单B所在的单元格区域。如下图所示:

    记录清单比对的常用技巧

     

    点击【确定】按钮后,就可以直接得到两份清单的交集部分,效果如下图。其中两个清单中虽然都有【西瓜】和【菠萝】,但是由于数量不一致,所以没有作为相同记录被提取出来。

    记录清单比对的常用技巧

     

    这个操作的原理,就是利用了高级筛选功能对于匹配指定条件的记录进行筛选的功能,把两张表中的任意一张作为条件区域,在另外一张表中就能筛选出与之相匹配的记录,忽略掉其他不相关的记录。

    需要注意的是,使用高级筛选的时候务必注意两个清单的标题行要保持一致(高级筛选中作为条件区域的前提),并且在选取【列表区域】和【条件区域】的时候都要把标题行的范围包含在其中。

     

    方法2:公式法

    使用公式进行比对的方法有很多,如果是单列数据对比比较常用的函数是COUNTIF,如果是多列数据记录对比,SUMPRODUCT函数比较胜任。

    在其中一张清单的旁边输入公式:

    =SUMPRODUCT((A2&B2=Sheet2!A$2:A$13&Sheet2!B$2:B$13)*1)

    并向下复制填充。其中的Sheet2!A$1:A$13Sheet2!B$2:B$13是另一张清单中的两列数据区域,需要根据实际情况修改。公式结果等于1的记录就是两个清单的交集部分,如下图所示:

    记录清单比对的常用技巧

     

    场景2,取出两表的差异记录

    要在某一张表里取出与另一张表的差异记录,就是未在另外那张清单里面出现的部分,其原理和操作都和上面第一种场景的差不多,所不同的只是筛选后所选取的集合正好互补。

    方法1:高级筛选

    先将两个清单的标题行更改使之保持一致,然后选中第一份数据清单所在的数据区域,在功能区上依次单击【数据】——【高级】,出现【高级筛选】对话框。在对话框中,筛选方式选择“在原有区域显示筛选结果”;【列表区域】和【条件区域】的选取和前面场景1完全相同,如下图所示:

    记录清单比对的常用技巧

     

    点击【确定】完成筛选,将筛选出来的记录全部选中按【Del】键删除(或做标记),然后点击【清除】按钮(2003版本中为【全部显示】按钮)就可以恢复筛选前的状态得到最终的结果,如下图所示:

     记录清单比对的常用技巧

     

    方法2,公式法

    使用公式的话,方法和场景1完全相同,只是最后需要提取的是公式结果等于0的记录。

     

    场景3,取出关键字相同但数据有差异的记录

    前面的两份清单中,【西瓜】和【菠萝】的货品名称虽然一致,但在两张表上的数量却不相同,在一些数据核对的场景下,就需要把这样的记录提取出来。

    方法1:高级筛选

    高级筛选当中可以使用特殊的公式,使得高级筛选的功能更加强大。

    第一张清单所在的sheet里面,把D1单元格留空,在D2单元格内输入公式:

    =VLOOKUP(A2,Sheet2!$A$2:$B$13,2,0)<>B2

    然后在功能区上依次单击【数据】——【高级】,出现【高级筛选】对话框。在对话框中,筛选方式选择“在原有区域显示筛选结果”;【列表区域】选取第一张清单中的完整数据区域,【条件区域】则选取刚刚特别设计过的D1:D2单元格区域,如下图所示:

     记录清单比对的常用技巧

    点击【确定】按钮以后,就可以得到筛选结果,就是第一张中货品名称与第二张表相同但数量却不一致的记录清单,如下图所示:

     记录清单比对的常用技巧

     

    同样的,照此方法在第二张清单当中操作,也可以在第二张清单中找到其中与第一张清单数据有差异的记录。

    这个方法是利用了高级筛选中可以通过自定义公式来添加筛选条件的功能,有关高级筛选中使用公式作为条件区域的用法,可参考下面这篇博文:

    数据库函数和高级筛选条件区域设置详解

     

    方法2:公式法

    使用公式还是可以利用前面用到的SUMPRODUCT函数,在其中一张清单的旁边输入公式:

    =SUMPRODUCT((A2=Sheet2!A$2:A$13)*(B2<>Sheet2!B$2:B$13))

    并向下复制填充。公式中的包含了两个条件,第一个条件是A列数据相同,第二个条件是B列数据不相同。公式结果等于1的记录就是两个清单中数据有差异的记录,如下图所示。这个例子中也可以使用更为人熟知的VLOOKUP函数来进行匹配查询,但是VLOOKUP只适合单列数据的匹配,如果目标清单中包含了更多字段数据的差异对比,还是SUMPRODUCT函数的扩展性更强一些。

     记录清单比对的常用技巧

     

    作者: chrisfang | 分类: Excel技巧 | 阅读: 13,949 次浏览 | Tags:
  • 数据库函数和高级筛选条件区域设置详解

    2012-05-30

    ————————————————以下原文发表于2010年7月——————————————

    使用数据库函数和使用高级筛选功能十分相似,都需要设定【条件区域】,并在应用中指明【条件区域】所在位置。

    以下面的数据表格为例,对于条件区域的设置,有以下几方面需要注意的内容:
    数据库函数和高级筛选条件区域设置详解

    1,条件区域至少包含两行,在默认情况下,第一行作为字段标题,第二行作为条件参数。在某些情况下(后面会提到),字段标题可以留空;条件参数也可以留空,表示任意条件。

    2,为避免出错,条件区域应尽量与数据区域分开放置,条件区域甚至可以放置在不同的工作表中。

    3,同一列中包含多个条件参数,表示并列的逻辑“或”,满足其中任一条件均能计入函数统计范畴。
    例如:下图中的条件区域表示“销售员”字段可以为“陈升”或“林木森”或“秋颖”。
    数据库函数和高级筛选条件区域设置详解

    4,同一行中包含多个条件参数,表示交叉叠加的逻辑“与”,同时满足这些条件的记录可以被函数计入统计范畴。
    例如:下图中的条件区域表示“销售员”字段为“陈升”同时“超市”字段值为“大润发”的记录。

    数据库函数和高级筛选条件区域设置详解

    5,如果条件区域包含多行多列,则参照上面两条规则,进行逻辑组合。
    例如:下图中的条件区域表示记录需要满足“大润发”超市的“陈升”销售员或“沃尔玛”超市的任意销售员。
     数据库函数和高级筛选条件区域设置详解

    6,条件参数不区分字母大小写。如需区分大小写,可以使用支持大小写区分的函数公式构建条件。

    7,对于文本字段,可以使用通配符,通配符包括“*”、“?”和“~”。
    例如:下图中的条件区域表示统计销售员字段以“林”字开头的所以记录。
     数据库函数和高级筛选条件区域设置详解

    8,在条件参数中,除了直接填写文本和数值,还可以使用比较运算符直接与文本或数值相连,表示比较的条件。
    例如:下图中的条件区域表示销售员“不等于”陈升且数量“大于”4000,函数统计结果为6。

    数据库函数和高级筛选条件区域设置详解

    9,除了直接填写条件,也可以使用等号引导条件,其中条件部分需要用半角双引号包围。
    例如:下图中的条件区域显示了其中可以输入的条件。

    数据库函数和高级筛选条件区域设置详解

    10,条件参数还可以使用公式(上面那种还不能算作真正的公式)。当使用公式作为条件时,字段标题必须留空或使用其他数据表中不存在的标题。条件公式必须是进行逻辑判断的公式。

    11,条件参数的公式中不能直接引用字段标题,当需要引用整个字段时,可以使用第一条记录所在单元格作为引用,且必须使用相对引用方式。
    例如:下图中的条件区域显示了其中可以输入的条件公式。其中G2为“销售员”字段的第一条记录所在单元格,C2为“数量”字段的第一条记录所在单元格。

    数据库函数和高级筛选条件区域设置详解
    注意,如果在“表”(2003版本中称为“列表”)中使用数据库函数,则可以直接使用表中所定义的字段名称来作为条件参数公式中的字段引用。

    12,如果没有使用第一条记录所在单元格进行字段引用,则会以引用单元格以下的数据区域作为统计区域。
    例如:下图中的条件区域显示了其中实际输入的条件公式,两个条件均引用第7行,因此会以第7行的记录开始进行统计。统计结果为5。

    2010-7-13 11:35 上传

    下载附件 (2.68 KB)

    数据库函数和高级筛选条件区域设置详解

    13,如果多个条件的引用单元格不一致,会发生统计区域的错位情况。
    例如:下图中的条件区域显示了其中实际输入的条件公式,其中条件1以G9单元格作为引用,条件2以C2单元格作为引用,因此发生了数据区域的错位,在统计时也会以错位的对应关系进行统计。

    数据库函数和高级筛选条件区域设置详解

    14,在条件公式中需要引用非整列字段的数据区域时,必须使用绝对引用方式。
    例如:下图中的条件区域显示了其中实际输入的条件公式,其中条件2中以C列的平均值作为判断条件,平均值的计算引用就以绝对引用方式引用了需要计算平均值的数据区域。

     数据库函数和高级筛选条件区域设置详解

    附件下载:

    微盘:http://vdisk.weibo.com/s/668NU

    本地下载:数据库函数的条件设置 (2271)

    作者: chrisfang | 分类: Excel技巧 | 阅读: 7,737 次浏览 | Tags:
  • Excel去除重复项的几种常用技巧

    2012-05-28

    在工作中,经常会有需要在对原始记录清单进行整理时,剔除其中一些重复项。所谓的重复项,通常是指某些记录在各个字段中都有相同的内容(纵向称为字段,横向称为记录),例如下面图中的第三行数据记录和第五行数据记录就是完全相同的两条记录,除此以外还有第六行和第十行也是一组相同记录。

    Excel去除重复项的几种常用技巧

    在另外一些场景下,用户也许会希望找出并剔除某几个字段相同的但并不完全重复的“重复项”,例如下面图中的第7行记录和第12行记录中的【姓名】字段内容相同,但其他字段的内容则不完全相同。

    Excel去除重复项的几种常用技巧

    以上这两种重复项的类型有所不同,在剔除操作的实现上也略有区别,但本质上并无太大差别,可以互相借鉴参考。下面将以这两种场景为例,介绍几种常用的删除重复项操作技巧。

    1,删除重复项

    【删除重复项】功能是Excel 2007版本以后新增的功能,因此适用于Excel 2007及其后续版本。

    将活动单元格定位在数据清单中,然后在功能区上依次单击【数据】——【删除重复项】,会出现【删除重复项】对话框。

    对话框中会要求用户选择重复数据所在的列(字段)。假定我们将“重复项”定义为所有字段的内容都完全相同的记录,那么在这里就要把所有列都勾选上。而如果只是把某列相同的记录定义为重复项,例如文章开头所提到的第二种场景情况,那么只需要勾选那一列字段即可。

    Excel去除重复项的几种常用技巧

    在勾选所有列以后,单击【确定】按钮,就会自动得到删除重复项之后的数据清单,剔除的空白行会自动由下方的数据行填补,但不会影响数据表以外的其他区域。效果如下图所示:

    Excel去除重复项的几种常用技巧

     

    2,高级筛选

    在2007版出现以前,【高级筛选】功能一直是删除重复项的利器。

    将活动单元格定位在数据清单中,然后在功能区上依次单击【数据】——【高级】(2003版本中的操作路径是【数据】——【筛选】——【高级筛选】),会出现【高级筛选】对话框。

    对话框中会要求用户指定列表区域,就是数据清单所在的单元格区域,默认情况下会自动生成。筛选方式上一般选择“将筛选结果复制到其他位置”,以方便删除重复项以后的处理操作。指定这种方式以后,对话框中会要求用户指定“复制到”哪里,也就是删除重复项以后的数据清单放置位置,用户指定其左上角单元格的位置即可,在这个例子中我们设定为E1单元格。最后一项也是删除重复项最关键的一个选项必须勾选:【选择不重复的记录】。如下图所示:

    Excel去除重复项的几种常用技巧

    单击【确定】按钮以后,就会在E1单元格开始的区域中生成剔除重复项以后的另一份数据清单,效果如下图所示:

    Excel去除重复项的几种常用技巧

    假定按照第二种场景的方式来定义重复项,就是需要删除所有【姓名】字段内容重复的记录,可以这样操作:

    在数据清单中,选中【姓名】字段所在的区域A1:A12单元格,然后在功能区上依次单击【数据】——【高级】(2003版本中的操作路径是【数据】——【筛选】——【高级筛选】),会出现【高级筛选】对话框。筛选方式选择“在原有区域显示筛选结果”,【选择不重复的记录】复选框同样必须勾选,如下图所示:

    Excel去除重复项的几种常用技巧

    选择【在原有区域显示筛选结果】的方式,使得对A列不重复项的筛选结果能够同时影响到其他字段上。单击【确定】按钮后,筛选结果如下图所示。将这个筛选的结果复制粘贴出来,就等到一份剔除姓名字段重复项以后的新清单。需要补充的一点是,对于姓名字段相同的记录,这样的剔除操作过后,保留的是最先出现的记录。例如在第七行和第十二行两个“吴凡”之间,Excel保留的是最先出现的第七行记录,而剔除了后面的第十二行记录。

    Excel去除重复项的几种常用技巧

     

    3,使用公式

    如果会一点函数公式,那么用函数公式配合筛选的方式来操作会更灵活多变一些,可以适应更多复杂条件。

    在D列增加一个辅助公式,在D2单元格中输入公式:=A2&B2&C2,然后向下复制填充,生成的一列公式结果是将各条记录中的三个字段内容合并在一个单元格中。然后在E列再增加一个辅助公式,在E2单元格中输入公式:=COUNTIF(D2:D$12,D2),特别注意公式中绝对引用符号$的使用位置。将公式向下复制填充,得到下面图中所示的结果: 

    Excel去除重复项的几种常用技巧

    COUNTIF函数的作用是统计某个区间内,与查询值相同的数据的个数,上面那个公式中的D2:D$12这种绝对引用和相对引用相组合的方式就可以在公式向下复制的过程中形成一个随位置变化的动态区域,使得COUNTIF函数每次都只跟自己下方的区域中的数据进行对比,而不会牵涉到上方的数据。因此在第三行的时候,会找到2条与“李明28研发部”相同的记录,而到了第五行的时候,就只找到了一条匹配记录。

    通过这个公式结果可以发现,所有E列运算结果大于等于2的记录(如果有更多的重复,结果会大于2)就是我们需要剔除的重复项。这个时候,使用自动筛选功能,在E列筛选出大于1所在的行,然后删除整行,再恢复到非筛选状态,就能得到最后所需的清单,如下图所示:

    Excel去除重复项的几种常用技巧

     在上面的操作中之所以要将三个字段内容合并在一起,是因为我们在第一个场景中将“重复项”定义为所有字段内容都相同,因此将这三个字段的内容同时合并在一起进行比较,相当于逻辑运算中的“与”运算。假设需要按照第二场景中的定义来进行剔除操作,就不再需要D列这个过渡公式,而是可以直接以A列作为COUNTIF函数的对比区域,可以使用公式:=COUNTIF(A2:A$12,A2) 就可以实现相同的效果。需要补充说明的是,这个方法在剔除操作后,所保留下来的记录是重复记录中最晚出现的那条记录。

    同样是第一场景,也可以用一个稍微复杂一些的公式来替代D、E两列的公式:=SUMPRODUCT(1*(A2&B2&C2=A2:A$12&B2:B$12&C2:C$12)) 公式的原理与前面相同。

    作者: chrisfang | 分类: Excel技巧 | 阅读: 9,880 次浏览 | Tags:
  • LOOKUP函数的二分法查找策略

    2012-05-24
    title

    二分法查找又称折半查找,它是一种效率较高的查找算法。二分法通常要求目标数组中的数据是有序排列的。LOOKUP函数所使用的查找策略就是二分法,不仅仅是LOOKUP,其实VLOOKUP  HLOOKUP函数在其第四参数为True时、MATCH函数在其第三参数为1时也都是遵循了二分法的查找原则来进行运算的。
    阅读全文 »

    作者: chrisfang | 分类: Excel函数公式 | 阅读: 8,613 次浏览 | Tags:
  • Excel八音盒

    2012-05-09

    这几天重感冒,做不了什么正经事,用以前的作品(《我爱弹钢琴》)改了一个趣味小程序。

    大家应该都见过八音盒吧,有人知道八音盒的原理吗?

    八音盒是通过长度或厚度不同的多个细小铜片(簧片)与携带针状突起的滚筒相互作用来发声的,最初是由瑞士的钟表匠发明的。

     

    Excel八音盒

    这个Excel小程序就是模拟了八音盒的发声原理,用表格单元格当作滚筒,用MIDI作为发声簧片。只要在表格单元格里输入数字作为滚筒上的打孔标记,就可以完成谱曲。没有条件自己来做八音盒的,现在也可以用Excel来模拟实现啦。

    谱一首属于你自己的动听乐曲,送给你心中的人吧。

     

    Excel八音盒

           Excel需要启用宏,记得打开音箱

    播放演示:

    微盘下载:http://vdisk.weibo.com/s/5a8Gt/1336546636

    本地下载:Excel八音盒 (2905)

    作者: chrisfang | 分类: ExcelVBA程序 | 阅读: 8,318 次浏览 | Tags:
  • 【56色板】使用说明

    2012-05-03

      【56色板】是一款使用VB开发的Excel COM加载宏程序,适用于32位的Microsoft Excel 2007或2010版。可以在07以上版本的Excel中继续沿用2003版本中的56种色块的色板模式,对单元格、图形、图表等多种对象的填充色、字体颜色、线条色(边框色)进行即时设置,并且为用户提供了在线的庞大的配色方案库,方便用户进行颜色美化。

    【56色板】使用说明

    【程序设计说明】

    在2003版本当中,常用工具栏上的【填充颜色】、【字体颜色】等按钮中可以使用包含40种标准色的色板,如下图所示:

    【56色板】使用说明

    而在【单元格格式】、【设置自选图形格式】等对话框中则可以使用包含56种标准色的色板,如下图所示:

    【56色板】使用说明

     其实,在每个工作簿当中都包含了一套拥有56种颜色的颜色系统(可以随工作簿携带),在Excel的选项当中可以看到这些颜色的分类并且可以对其进行修改自定义,如下图所示。其中【图表颜色】就是Excel 2003当中自动生成图表是所采用的默认颜色来源。

    【56色板】使用说明

    可是在Excel 2007版以后,上面这些颜色的应用情况发生了变化。在Excel 2007和Excel 2010当中,采用【主题色】和【标准色】组合的方式形成可选色板。

    其中【主题色】包括八种可以自定义的颜色加上黑白两色形成10种基准色,然后由基准色的深浅度不同产生5×10种衍生色;而【标准色】则是一组包括红橙黄绿青蓝紫常见颜色的10种颜色。因此,虽然下面显示的色板有70个色块可选,但实际上真正的颜色只有20种,其中只有8种可以自定义。这对于用惯了老版本当中色板的用户来说会造成不小的麻烦。

    【56色板】使用说明

    当然,2007以上版本中的进步之处在于多了一种【其他颜色】的直接可选项,允许用户直接在工作簿中使用色板以外的颜色,因此在2007以上的版本中,工作簿当中的可容纳颜色种类高达1600万种。而对比2003版,虽然用户可以对色板体系中的56种颜色进行自定义,但任何时候工作簿中的显示颜色只能是色板上56种颜色中的其中一种,不能超出这个范围。因此对于2003版本来说,工作簿中的最大可容纳颜色种类只有56种。

    【56色板】使用说明

     

    Excel 2007和10版尽管可以选择更多颜色,但是从操作上来说,没有把更多的颜色种类直接放置在可选色板上,在使用效率上还是会造成一定的影响。
    【56色板】的程序设计,就是为了在2007和2010以及更高版本的Excel当中,不影响现有主题色体系的情况下,可以继续沿用2003当中的56种颜色色块的色板操作模式,并且在此基础上简化了自定义颜色的操作、并且设定了【工作簿】和【系统】两套颜色存储体系,方便用户自由的备份和携带自己所使用的颜色方案。
    这个程序设定的一个特别之处就是如果用户使用工作簿色彩存储体系,并且对颜色了自定义,然后又在工作簿中应用了这些颜色,那么即使将工作簿另存为2003格式,在2003的环境下打开这个工作簿,颜色显示能够依旧与原先保持完全一致(原有正常情况下,2007以上版本中所应用的一些颜色,到了2003里面打开时部分颜色就会呈现出另外的色彩)。
    除此以外,这个程序还提供了大量的【在线配色方案】供用户选取,这些配色方案是专门为本程序用户收集的国际专业配色站点上最受欢迎的一些方案,从中可以获取很多配色设计上的灵感。这些配色方案还会不定期的更新和增加,用户不需要更新程序也可以直接在联网的情况下获取到。

    【最新版本】:V1.3

    【更新历史】

    V1.0:内部测试版本
    V1.1:内部测试版本
    V1.2Demo:公开测试版本
    V1.2:内部测试版本
    V1.3:发布时间:2012-6-27
    1,工作簿色板和系统色板切换
    2,其他工作簿颜色导入
    3,填充色、文字色和线条色三种对象选择
    4,在线配色

     

    【使用前的设置】

    本程序是COM加载宏,需要在Excel程序中安装加载。如果你之前使用过此程序,再次安装前建议先行卸载,以免出现冲突。

    手动加载方法如下
    将下载文件包解压以后,把其中【56ColorsForExcel.DLL】这个主程序文件放置到一个相对固定的磁盘路径下,在加载安装后不要删除、更名或更改其路径。
    在Excel功能区上依次点击【文件】(2007版中是圆形的【Office按钮】)——【选项】(2007版中是下方靠右侧的【Excel选项】)——【加载项】,在出现的对话框下方的【管理】下拉框中选中【COM加载项】,然后点击【转到】,出现【COM】加载项的对话框。点击【添加】按钮会打开一个浏览器窗口,在里面找到56ColorsForExcel.DLL文件的所在,选中以后确定添加,就可以得到最终的【COM加载项】对话框,如下图所示。最后单击【确定】就可以完成这个加载项的安装。
    注意,加载过程中可能会出现某些安全程序的提示信息,在可以信任的情况下请允许程序的操作行为。(大多数COM加载项会在注册表中进行DLL注册的行为,此程序没有其他恶意或潜在威胁的操作)

    【56色板】使用说明

     

    如果需要卸载,只需要重新打开【COM加载项】对话框,选中这个加载项点击【删除】即可。
    如果手动安装失败,可以尝试下面的自动加载方法。
    自动加载方法如下
    将下载文件包解压以后,把整个文件夹放置到一个相对固定的磁盘路径下,在加载安装后不要删除、更名或更改其路径。关闭所有Excel程序,在文件包中找到【Install】的批处理文件,双击运行即可完成安装。部分安全软件可能会阻止运行,在您没有顾虑的前提下请允许运行。
    如果需要卸载则点击【Uninstall】的批处理文件。

    正确加载安装完成后,打开Excel程序后功能区上会出现【56色板】的选项卡,显示如下图:

     

    【56色板】使用说明

     最后补充说明一下,本程序只适合在32位的Windows系统上安装使用。对于64位,由于目前环境下.NET的程序在安装部署上存在诸多困难,被大多数XP用户所排斥。如果为此需要使用不同的开发程序编写两套软件,精力代价又过于庞大,因此暂时不考虑64位的发布。

    【程序使用说明】

    <色板使用>

    在选项卡的第一个命令组中,包含了【填充】、【文字】、【线条】三个下拉按钮,可以对选中的单元格、图形、图表中各类元素分别设置其填充底色、文字颜色和线条颜色。按钮左侧的色块显示了最近一次所使用的颜色,直接点击可以快速重复前一次的颜色设置。

    【56色板】使用说明

     

    <浮动面板>

    如果你需要进行一些连续的颜色设置操作,不希望一次次的去点击下拉按钮,那可以按下右侧第一排的【浮动面板】开关,会出现一个固定显示的色板,方便你直接从上面选择颜色。但是需要留意的是,浮动面板上需要通过三个选项按钮来确定颜色设置的对象。

    【56色板】使用说明

     

    <格式刷>
    右侧第二个按钮【格式刷】的功能与Excel本身的格式刷功能完全相同。用户在进行颜色设置等操作时,格式刷是非常有用的工具,把格式刷按钮放在这个工具面板当中方便用户直接调用,而不需要在其他选项卡之间反复来回切换。
    <颜色设置对话框>
    点击右侧第三个按钮【颜色设置】会出现一个提供用户进行颜色设置的对话框。点击每个色块会打开一个颜色设置窗口,可以自定义颜色来替换之前的颜色。

    【56色板】使用说明

     

    对话框上方有四个按钮。前两个是一组开关,可以在【工作簿色板】和【系统色板】之间切换。每个Excel工作簿都隐含了一套完整的56种颜色的色板体系,用户在这里设置的颜色可以随这个工作簿携带(即使将工作簿发给其他用户也不会丢失)。如果打开两个设置了不同色板的工作簿,可以使用不同的配色体系。

    使用工作簿色板体系的一个特别之处就是如果对此色板进行了自定义,并且在工作簿中应用了这些颜色,那么即使将工作簿另存为2003格式,在2003的环境下打开这个工作簿,颜色能够依旧保持完全一致(原有正常情况下,2007以上版本中所应用的一些颜色,到了2003里面打开时部分颜色就会呈现出另外的色彩)。
    除此以外,本程序还专门准备了一套【系统色板】,方便用户将自定义的颜色配置保存在计算机系统当中,即使打开不同的工作簿也可以使用同一套配色。方便用户将最喜爱最常用的配色方案便捷保存和调用。
    这两套色板在切换以后,功能区上的下拉按钮里面所显示的色块也会随之变化。
    第三个按钮是【从其他工作簿复制颜色】,可以直接将另外工作簿中的色板方案直接导入到当前工作簿当中覆盖。
    第四个按钮是【恢复默认】,点击后可以将当前选中的色板恢复到Excel原有默认的色彩排列方案。
    关于本软件颜色系统的使用奥妙,可以参考这个视频:

                          

    <在线配色方案>
    在线配色方案可为用户提供成百上千套专业的现成的配色方案(先期提供200套,陆续增加),方便用户直接使用。
    在联网状态下,可在【方案组】下拉框中选择组号,然后在【方案名】下拉框中选择具体的方案名称,右侧就会出现此配色方案中包含的各个色块。在【模式】中选择颜色的设置对象(这是三个单选开关按钮,首次点击后会保持按下状态),然后就可以直接点击右侧的色块进行颜色应用。

    【56色板】使用说明

     

    【程序下载】

    新浪微盘下载:http://vdisk.weibo.com/s/7FO06/1340771039

    本地下载:56色板V1.3版本 (2124)

     

    【操作演示视频】

                               
    作者: chrisfang | 分类: ExcelVBA程序 | 阅读: 6,201 次浏览 | Tags:
  • Excel单元格绘图工具

    2012-04-09

    以前发在EHblog的老博文,现在关闭了,准备陆陆续续搬迁一点过来。时间久了,有些文章也不一定保值了。

    ————————————————以下原文发表于2010-3-17——————————————

    前日在网上闲逛时凑巧看到一个名为ExcelArt的软件介绍(http://www.cnbeta.com/articles/105787.htm),此软件可以将图片转换为Excel单元格图像,在Excel单元格中画图变得不再那么复杂,可以轻松按键搞定。去下载了试用了一下,非注册版有诸多限制,而且转换还以失败告终。去他们的主页看了一下,专业版竟然售价10欧元,企业版50欧元!

    看来还是自己动手做一个比较方便!
    用VBA制作的思路其实很简单,应该已经有先人实践过,只是没有见过成熟产品,所以发上来和大家一起分享一下。
    软件界面:

    Excel单元格绘图工具

    生成效果如下:

    Excel单元格绘图工具

    附件如下:请使用2007以上版本打开。

    微盘下载:http://vdisk.weibo.com/s/3Wdeh

    本地下载:单元格画图V2.1(96DPI) (3037)

     

    上述附件中的程序假定分辨率为96DPI,如需适用于其他的分辨率条件下,可以使用下面的附件程序,其中的坐标转换部分代码参考Winland大侠的代码。

    微盘下载:http://vdisk.weibo.com/s/3Wdla

    本地下载:单元格画图V2.0 (2594)

     

    主要部分代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    
    '以下代码位于用户窗体UesrForm1之中:
    '撰写:chrisfang
    '网址:http://Club.ExcelHome.net
    '日期:2010-3-16 17:29:39
    Private Declare Function GetPixel Lib "gdi32" ( _
                                      ByVal hDC As Long, _
                                      ByVal x As Long, _
                                      ByVal y As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
                                        ByVal lpClassName As String, _
                                        ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowDC Lib "user32" ( _
                                         ByVal hwnd As Long) As Long
    Public maxx, maxy
     
    '--------------------------------------------------------------------------------
    Private Sub CommandButton1_Click()
    Dim hwnd, hDC As Long
    If maxx = 0 Then
    MsgBox "请先选择尺寸规格!"
    Exit Sub
    End If
    hwnd = FindWindow(vbNullString, Me.Caption)
    hDC = GetWindowDC(hwnd)
    ThisWorkbook.Sheets(1).Range("A1:OJ300").Interior.Color = -1
    winx = (Me.Width - Me.InsideWidth) / 2
    winy = Me.Height - Me.InsideHeight - winx
    mx = (winx + Me.Image1.Left) * 4 / 3
    my = (winy + Me.Image1.Top) * 4 / 3
    'Application.ScreenUpdating = False
    For x = 1 To maxx
    For y = 1 To maxy
    iColor = GetPixel(hDC, mx + x * 4 / 3, my + y * 4 / 3)
    ThisWorkbook.Sheets(1).Cells(y, x).Interior.Color = iColor
    Next y
    Next x
    'Application.ScreenUpdating = True
    MsgBox "绘制完成!"
    End Sub
    '--------------------------------------------------------------------------------
    Private Sub CommandButton2_Click()
    filestoOpen = Application.GetOpenFilename _
    (FileFilter:="Microsoft Image Files (*.jpg;*.jpeg; *.bmp), *.jpg;*.jpeg; *.bmp", _
    MultiSelect:=False, Title:="选择图片文件")
    If TypeName(filestoOpen) = "Boolean" Then
    MsgBox "没有选择文件"
    GoTo ExitHandler
    Else
    Me.Image1.Picture = LoadPicture(filestoOpen)
    End If
    ExitHandler:
    End Sub
    '--------------------------------------------------------------------------------
    Private Sub OptionButton1_Click()
    If Me.OptionButton1.Value = True Then
    maxx = 200
    maxy = 150
    Call disparea(maxx, maxy)
    End If
    End Sub
    '--------------------------------------------------------------------------------
    Private Sub OptionButton2_Click()
    If Me.OptionButton2.Value = True Then
    maxx = 300
    maxy = 225
    Call disparea(maxx, maxy)
    End If
    End Sub
    '--------------------------------------------------------------------------------
    Private Sub OptionButton3_Click()
    If Me.OptionButton3.Value = True Then
    maxx = 400
    maxy = 300
    Call disparea(maxx, maxy)
    End If
    End Sub
    '--------------------------------------------------------------------------------
    Private Sub disparea(ByVal maxx As Integer , ByVal maxy As Integer )
    Application.ScreenUpdating = False
    Range (Cells(1, 1), Cells(1, maxx)).ColumnWidth = 0.54
    Range (Cells(1, 1), Cells(maxy, 1)).RowHeight = 5
    Range (Cells(1, 1), Cells(1, maxx)).EntireColumn.Hidden = False
    Range (Cells(1, 1), Cells(maxy, 1)).EntireRow.Hidden = False
    Range (Cells(1, maxx + 1), Cells(1, 16384)).EntireColumn.Hidden = True
    Range (Cells(maxy + 1, 1), Cells(1048576, 1)).EntireRow.Hidden = True
    Me.Image1.Left = Me.Image1.Left + (Me.Image1.Width - maxx) / 2
    Me.Image1.Top = Me.Image1.Top + (Me.Image1.Height - maxy) / 2
    Me.Image1.Width = maxx
    Me.Image1.Height = maxy
    Application.ScreenUpdating = True
    End Sub

     

     

    ————————————————以下更新于2012年5月29日——————————————

    微博上最近有一个有关招聘的段子很火爆,说是办公室文员招聘,面试的题目竟然是用Excel画一幅超级玛丽!

     Excel单元格绘图工具

    呵呵,其实这是老段子啦,不过这次的情况貌似特别欢乐,有很多网友热烈响应,纷纷在Excel上亲手效仿练习起来。

    Excel单元格绘图工具

    这些闲的可爱的宅男宅女们啊!我知道,有这样现成一个程序可以自动实现单元格绘图对他们来说其实毫无意义,乐趣其实就在于玩弄格子的过程中,甚至可以洗却平日里被格子玩弄的种种不快。

    不过这也不影响我在上面程序基础上修改了一个更简单的版本,不为别的,独乐不如众乐,就让这欢乐来的更蛋疼些吧。

    程序原理其实很简单,甚至不值得一提:就是在图片上按XY坐标依次提取像素点的色彩值(根据精细程度,可能会忽略一部分像素点),填充到相应位置的Excel单元格中即可。

    由于Excel 2003版本中行列数比较少(只有256列),可用像素点就比较少,而且可用颜色也不丰富,因此这个单元格绘图的功能一般还是在Excel 2007以上的版本中来实现的。如果对清晰度要求不高,就好比像“超级玛丽”这种早期8位机上的马赛克图形画面,就只要很少的格子就可以实现了。这种马赛克级别的像素图绘制程序,也可以拿来作为十字绣的图稿定制。

    Excel单元格绘图工具

                          

     

    微盘下载:http://vdisk.weibo.com/s/5T6Hi/1337935234

    本地下载:Excel像素图 (2148)

    作者: chrisfang | 分类: ExcelVBA程序 | 阅读: 1,321,281 次浏览 | Tags:
  • 单元格引用的简写和变形

    2012-04-08

    以前发在EHblog的老博文,现在关闭了,准备陆陆续续搬迁一点过来。时间久了,有些文章也不一定保值了。

    在Excel当中,单元格引用是一个很初级的问题,但也是和公式运算关系最密切的知识点之一。单元格引用从形式上来说包括A1引用和R1C1两种,从地址对象上来说又包含了绝对引用、相对引用以及两者结合的混合引用三种方式。上面两个概念已经很让人头晕了,但是要看明白下面的博文,你至少先要理解上述所提到的几个概念,因为下面博文所涉及的是比上述内容更复杂的与引用相关的元素——引用运算符,它包括【区域引用】、【联合引用】和【交叉引用】

    ————————————————以下原文发表于2009-9-17——————————————

     

    单元格引用有A1和R1C1两种样式,两种形式中又包含了绝对引用和相对引用两种不同的变化。本帖不讨论绝对引用和相对引用的问题,而是着重讨论一下在单元格引用中结合三种引用运算符所进行的引用地址变形及简写方式。

    单个区域的引用(同行、同列的简写)
    先来讲一下R1C1方式的引用
    对于G2:J2这样一个单元格区域,使用R1C1引用样式,可以写作:R2C7:R2C10,也可以写作:R2C10:R2C7。但R必须在C前面,“C10R2:C7R2”这样的写法是无效的。
    对于这样同行的区域引用,可以使用简写的引用方式,即将R2C7:R2C10中的红色部分省去,简写为R2C7:C10。
    如果对于同列的区域引用,例如G2:G10,则可以将R2C7:R10C7中的红色部分省去,简写为R2:R10C7。

    为什么可以这样简写?为什么一个是将后面的R2省去而另一个是将前面的C7省去?这样的简写有何规律?在没有官方的解释之前,为了便于大家的理解和记忆,我给出一个我自己的解释思路,请看下面的“关于引用运算符”:

    关于引用运算符
    Excel中包含了3种引用运算符,用于表示对单元格的引用,
    一种是冒号,称为区域运算符,这是最常见的,如=SUM(A2:B10),表示引用冒号两边单元格所围成的矩形区域;
    一种是逗号,称为联合运算符,如=RANK(A1,(A1:A10,C1:C10)),表示同时引用逗号两边的两个区域;
    还有一种是空格,称为交叉运算符,表示引用空格两边的两个区域的交集,如=SUM(A1:B5 A4:D9)即等价于=SUM(A4:B5)。这个交叉运算符也是我这里要重点讨论的一个使用技巧。

    对于G2:J2这个单元格区域,如果换一个角度来看,可以看作是G:J这4列与第2行所构成的交叉区域。因此,如果用交叉运算符和R1C1样式来引用的话,可以写作:R2 C7:C10,中间用交叉运算符空格分隔,即表示R2与C7:C10这两个区域的交叉区域。
    因此R2C7:R2C10等价于(R2 C7:C10),而这个形式与上面的简写形式R2C7:C10十分相似;
    同理,G2:G10可以表示为R2C7:R10C7,等价于(R2:R10 C7),这个形式与其简写形式R2:R10C7也十分相似。

    因此,同行或同列的区域引用简写原则可以看作是一次类似合并同类项以后消项的过程:
    R2C7:R2C10=R2 C7:C10=R2C7:C10
    R2C7:R10C7= R2:R10 C7=R2:R10C7

    交叉运算符同样也可以应用在A1引用方式中:
    例如(R2 C7:C10)如果使用A1引用方式,则可以写作:(2:2 G:J)
    (R2:R10 C7)如果使用A1引用方式,则可以写作:(G:G 2:10)

    多个区域的引用(合并同类项)
    以同时引用G13:J13、G15:J15、G17:J17这三行区域为例,
    使用R1C1的通常写法是:
    R13C7:R13C10,R15C7:R15C10,R17C7:R17C10 其中的逗号表示联合运算
    可以引入交叉运算符,简化为:
    R13 C7:C10,R15 C7:C10,R17 C7:C10
    此时,因为三个以逗号分隔的联合区域中,每个区域都与C7:C10有交叉部分,来做一个类似于合并同类项的变形,可以简化为:
    (R13,R15,R17) C7:C10
    将几个行号用逗号相连接表示联合运算,同时外面用括号包围以后,再与C7:C10区域使用空格进行连接,形成交叉运算关系,得到了我们所需要的三个行区域的同时引用。
    类似的,使用A1引用样式也可以进行合并变形,上述区域的A1引用写法为:(13:13,15:15,17:17) G:J

    上面三个区域是水平方向平行的三行,下面来看一下垂直方向平行的三列,实质用法完全一致:L13:L20、O13:O20、P13:P20
    R1C1形式:
    R13C12:R20C12,R13C14:R20C14,R13C16:R20C16
    引入交叉运算符,简化为:
    R13:R20 C12,R13:R20 C14,R13:R20 C16
    合并同类项,简化为:
    R13:R20 (C12,C14,C16)

    A1引用样式为:(L:L,N:N,P:P) 13:20

    地址引用的应用场合
    对于A1样式的地址引用,可以直接使用在公式中,例如:

    =SUM((13:13,15:15,17:17) G:J)

    即表示同时对G13:J13、G15:J15、G17:J17三个区域进行求和。

    对于R1C1引用样式,则通常用于INDIRECT函数的引用,对于INDIRECT参数中包含变量的情况,使用简写+变量参数的方式可以减少大量公式开销。具体案例待以后补充。
    而对于使用INDIRECT+TEXT函数构造引用样式来进行地址引用的场合,也可以用的R1C1引用样式及其简写方式,但其中既包含联合又包含交叉的复杂情况不太多见。简单举个例子说明一下应用:
    要对G:I三列中的某三个非相邻行进行引用,公式取得三个行号分别为aa、bb、cc,加权组合后可以得到aa0bb0cc一个8位数值,此时使用

    =TEXT(aa0bb0cc,"(R0R000R00,0) C7!:C9")

    就可以得到“(Raa,Rbb,Rcc) C7:C9”的INDIRECT引用参数。其中的TEXT函数格式代码中利用了千分位符来产生表示联合引用的逗号。

    除了INDIRECT函数,HYPERLINK函数中也可以用到A1样式和R1C1样式的引用地址,例如

    =HYPERLINK("#r13:r20 (c12,c14,c16)","链接")
    即可产生同时链接到L13:L20、O13:O20、P13:P20三个区域的超级链接。本帖附件中也使用了HYPERLINK函数便于大家识别所引用的具体区域范围。

    为了便于理解,可以结合下面这个附件,相信可以更容易明白一些:

    微盘下载:http://vdisk.weibo.com/s/3Vl0w

    本地下载:单元格引用 (2075)

    作者: chrisfang | 分类: Excel函数公式 | 阅读: 5,646 次浏览 | Tags: