本帖最后由 流浪铁匠 于 2018-6-6 00:38 编辑
半个月前分享了自己去年整理的100条函数知识点(不算最后1条其实只有99条)
谢谢大家的鼓励与支持
花了点时间搜肠刮肚,把一些100条内写不下以及这段时间对函数的发现整理出来,又凑了100条。
一家之言,姑妄听之
101,
单元格格式和数据类型是两码事。
单元格格式和数据类型是两码事。
单元格格式和数据类型是两码事。
(重要的事说3遍。群里见过无数新手修改了格式以为就能处理数据类型。
文本型数字转为可计算的数值,除了之前说的--,*1,value等等,分列、剪切板过度、选择性粘贴-运算、错误提示里的”转化为数字”等等基本功能都可以有效解决这个问题。
数值转成文本型数字可以使用分列(第3步选文本)、剪切板过度、&“”、文本函数(视数值规律)等方式处理。
102,sum在03版支持30个参数,07开始支持255个,而当参数数量过多时,sum可以使用sum((a1:a2,a3),a4) 即使用括号将多组参数变成单个参数的方式(区域联合)突破255个参数的数量限制(知道这方法就行了,一般公式不可能用到255个参数,汗)
103,if在03版支持7层套嵌,在07版开始支持64层,当条件过多时,if可以使用&或+的方式突破套嵌层数(这也只是个思路,当然实际工作推荐使用其他函数的方式化简公式而不是大量if套嵌)
104,rand的结果区间为[0,1),注意开闭区间差异,另外论坛有大佬介绍过其周期为6.95万亿,简单说就是你用rand产生的一组数出现重复的几率绝对比买彩票中大奖低(由于说法不一暂不考虑周期内能否出现重复的可能性)
105,rand的结果实际精度高于15位。
106,测试表明rank,frequency,vlookup,match, lookup(二分法),mode.mult,max,min,small,large,subtotal,aggregate,quartile,percentile,delta 等函数对数值精度的识别也是高于15位的(部分未列举的函数很难验证其对精度的识别问题,并不代表其他函数不存在这性质)
107,lookup比vlookup/hlookup强大的原因之一就是lookup查找方向可行可列,数组形式下查找方向由数组区域的行列数决定:
108,向量形式下lookup的3参类似sumif的3参,具有自适应性,但请注意方向,只写1个单元格时识别为行方向,想识别为列方向,请至少写上2个单元格组成的区域来指明方向
109,注意lookup,match这类函数在升序时的二分法的取值区间是左闭右开的
110,frequnecy的2参的取值区间是左开右闭的
111,关于大小写,upper可以把633个字符转成大写,而lower可以把665个字符转为小写,2个函数的大小写能力转化不是完全 一 一对应的
112,proper函数(针对首字母)可以把675个字符转为大写,(针对非首字母)可以把665个字符转为小写,即proper转大写能力比upper强,但转小写能力和lower一致。
113,小写转大写,proper比upper多转化42个字符从小写到所谓大写,但其中有38个被proper(针对首字母)转为所谓大写后不能再被lower或proper(针对非首字母)转为小写
114,有26组一大一小的字符,upper和lower可正常相互大小写转化,但proper函数只能将其从大写形式转化为小写形式,无论这些字符是否在单词首字母,不能从小写形式转化为大写形式。
115,从上面几个函数的大小写转化角度来说大写字母不一定大于对应的小写字母的
116,测试下excel的忽略大小写性质不仅限于英文字母,希腊/罗马/西里尔文乃至个别汉字甚至似乎无关联的字符都可能存在这个性质
117,trim可以清除char(32),char(129-254)与char(41377)合计128个字符,用unicode字符集看是unichar(32)和unichar(12288)合计2个unicode字符,而char(41377)/unichar(12288)即全角形式的空格,所以说这函数是专门清除空格的
118,字符串中间间隔的不定数量空格,trim会保留1个作为间隔符,所以在清除字符串中间的多个不定数量的间隔符时可使用trim+substitute处理。如果要清除全部空格,请使用substitute+char(32)
119, clean可以清除char(1-31),char(128)合计32个ANSI字符,用unicode字符集看是unichar(1-31),unichar(128-159)合计63个unicode字符,这函数一般用于清除常见的非打印字符
120,trim+clean配合下还是有很多不可见字符清除不了的,譬如char(127)和unichar(160),后者很有名,微软的函数帮助里提到了这个字符的名字:”不间断空格字符”,常见于网页。请小心code函数返回结果为63的不可见字符,实际可能的字符编码实在太多了
121,纯函数法清除不可见字符的稳妥方式要使用2013的unichar/unicode+substitite处理(个人观点,因为目前看过的代码和插件都会有少数特殊不可见字符无法清除的情况,毕竟少数字符的不可见性与字体等其他因素有关)
122,说完转化大小写,说到忽略大小写性质的函数,遍历下有1835组字符相互间可被忽略大小写的函数相互识别的(排除了几个通配符和后面的一组特殊字符)
123,全半角转化的2个函数widechar与asc的转化能力可一一对应,合计95组字符可以相互转化为全/半角(默认语言为中文时),在其他语言下略有差异
124,函数里有2个常见的通配符 * 和 ?,需要正常查找和统计这2个符号请使用不支持通配符的函数或使用第3个通配符~转义,而支持通配符的函数都是忽略大小写的
125,排除上述这条的通配性后还是至少有8个字符vlookup自己找不到自己的
126,统计和查找时请小心一些特殊字符,有一组3709个字符在部分函数统计下被视为相同的
127,excel里有极少数字符是默认右对齐的(非数字),在公式里与数字&会打乱单元格内的显示顺序
128,这类字符里有2个最特殊,一定程度上也具有通配符的性质(经群友测试需要先在excel内录入字符激活所谓通配性且有其他局限性)
129,除了0-9的默认字符外,有189个字符(含0-9的全角字符)在函数公式中计算时直接识别为数字的(疑为一些特殊语言内的数字字符)
130,除了已知的3个隐藏函数,微软也干过把自己函数隐藏的事,后续版本隐藏了ceiling/floor.precise这2个2010新增函数,有意思的是,2010版本自己隐藏了自己在2010新增的函数iso.ceiling
(这里说的隐藏是在插入函数内找不到且只能在录入完整个函数+左括号后才有参数提示)
131,微软不是只会隐藏一些有局限性或可被替代的函数,也可能在后续版本删除某个函数,譬如貌似power query前身的SQL.REQUEST函数,看介绍仅存在于2007版本
132,widechar是一个具有变身能力的函数(用于半角字符转化为全角字符),因为在默认语言为中文时的函数名为widechar,为英文时为dbcs,为日文时为jis,为朝鲜文时为junja,中文繁体(台湾)时的函数名为big5
133,dollar(英文)/rmb(中文)/YEN(日文)/WON(朝鲜文) 为另一组具有这个能力的函数
134,int,round这批舍入函数忽略单元格里的数字的数据类型直接视为数值进行舍入的
135,但这批舍入函数也会把逻辑值直接识别为数值也进行计算……
136,日期函数也具有上面2条性质(熟悉以上3条对于某些问题并不需要把数据源的数据类型进行处理)
137,各个舍入函数除了舍入规则的区别,主要请注意1/2参数的符号区别和数值为负数时的舍入规则,熟悉这些性质,你会发现几种常见的舍入效果使用各个舍入函数基本都能实现
138,别以为只有舍入函数能取整,部分日期函数/文本函数/工程函数以及fact/lcm等函数照样能把数值取整(仅列举函数性质,但平时尽量别这么用,有局限性)
139,统计时countif这类if后缀函数连数字的全半角差异也忽略(注意是数字,目前唯一发现的一类直接忽略全半角差异性质的情况)
140,len函数的结果对unicode编码大于65535的字符的结果为2
141,mid与left/right对上面这条的字符的提取结果是不一样的,与其他结论配合可以证明mid的提取机理与left/right是不一样的,left/right是按照字符数提取的
142,mid提取的是字符编码,因为甚至可以把提取后重组为新字符而且提取的编码测试证明可以用于进行后续查找与统计(支持通配符)
143,midb这类函数在默认语言为中文时对汉字仅提取1个字节,返回的是空格,这也是判断汉字的一个常用手段(注意是汉字不是上面unicode编码大于65535的特殊字符)
144,searchb配合?可以找到字符串内第1个单字节字符(默认语言为中文时)
145,transpose等函数必须使用三键才能正确返回结果的
146,count很强大,因为它能忽略(内存数组内的)错误值的性质是sum不具备的
147,lookup/match(二分法)/aggregate(1参14-19时)等函数也能忽略内存数组里的错误值
148,有些函数可以识别错误值譬如error.type ,countif,数据库函数等等而不会由于错误值的存在而报错。
149,subtotal与aggregate在统计时可以忽略本身函数,这个能力在一些特殊统计时很有用
150,适当使用常量数组,可以有效简化公式。
|