|
楼主 |
发表于 2009-12-10 11:31
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 胡剑0227 于 2011-8-17 14:15 编辑
形参表达中的玄机
形参,调出一个函数的“函数提示工具”就能看到形参列表。根据形参的英文描述,我们就能拼凑出这个函数的功能,进而回想起这个函数该如何用,例如SUMIF函数和VLOOKUP函数
SUMIF(range,criteria,sum_range)
翻译:
SUMIF(区域,关键字,汇总区域),再根据SUMIF(汇总?条件?),那么自然就能拼凑出这个函数的功能,对“range”进行“criteria”约束,并对“sum_range”汇总,简称为SUMIF(条件求和)。
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
翻译:
VLOOKUP(查找值,表格数组,(表格数组的)列索引号,区域的查找(方式)),这里个人感觉range_lookup 换成table_lookup应该更贴切。
这样组词造句也就比较难走样了,大约就是根据vlookup_value,在table_array中查找。如果想到V代表垂直
,那么也不难揣摩查找应该是按列,并有理由相信是第一列去查找,然后返回col_index_num字段的元素,再确定
查找方式range_lookup,这里 range_lookup=0(0有种无差别的感觉),于是可以联想为精确查找,range_lookup<>0时
就是不精确查找(模糊查找)。当然,熟悉函数以后会发现精确查找一般都是查找方式设置为0.
这样,只要用过一次VLOOKUP函数,吃过这块三明治,那么我相信再次见到它时我们马上还能回味出它的味道。
刚开始的时候做到这样就足够了。当然如果有精力,我们还可以再从这些形参描述中提取更多信息。节
能减排么,充分利用资源自然是很重要的。
再看SUMIF的形参,range,criteria,sum_range,有发现什么特点吗?呵呵,如果是初学,又仅仅看到一个函数
的形参是不能发现什么规律的。找规律也是有技巧的,要学会归一性原则,就是控制一个因素变化,其他因素都保持不变,然后才能让这个因素的影响显现出来。
有点扯远了。我们这里可以粗糙的划分成两类(应该可以划分更精细,有兴趣者可以尝试,我没有深究下):形参类型 描述,形参功能 描述(这里纯是我自己擅自划分的,不具权威性,只是为了能让大家从形参中再得到些东西)
SUMIF
range:形参类型 描述,形参类型为 单元格区域;(这点是本节重点)
criteria:形参功能性 描述
sum_range:这个是带有 功能修饰的形参类型 描述,偏正短语,也归为形参类型 描述。
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
lookup_value:形参功能性 描述
table_array:带有功能修饰的形参类型 描述,偏正短语....
col_index_num:形参功能性 描述
range_lookup:形参功能性 描述
大家看了还是会觉得紊乱,惭愧。归纳一下,形参主干是 range、reference或array、vector的我这里称它们
为形参类型描述,这里range、reference是的要求是单元格区域或引用,这个要求比array、vector要严格多了,所以很
多初学时感觉很亲切的函数,在以后学数组公式时会发觉其参数限定是太死板了。我自己揣摩,这些函数可能就
是为初学函数的同学配置的,他们的优点也很鲜明,使用简单。
这里讲玄机了,功能性描述的参数不要求是单元格引用的,所以不会带来参数类型限制造成的麻烦,更重要的是以后可以通过该参数的数组化来实现函数的数组应用。 形参为类型描述的,且主干词为range、reference的就要求参数属性是单元格引用了,于是就不能使用纯数组(这里只是却别于属性为单元格区域的特殊数组),在数组公式应用时会有很大限制。
看个例子:SUMIF,COUNTIF
先感叹一下,本台电脑Snagit不能用,实在烦心,先文字表达,上附件,有空换台电脑再不上。
比如在A1:A10单元格中依次输入了数字1-10,然后写了一个条件计数的公式:=COUNTIF(A1:A10,">5"),结果正
确,返回5,但如果你尝试:=countif({1;2;3;4;5;6;7;8;9;10},">5"),想想应该也对吧,但EXCEL就会报错,这个时候你
就很快就会意识到可能第一参数直接写这样的 常数数组 是不对的。(这当然是得益于归一化原则的好处,就这里一个地方不同,人家用单元格地址是对的,你用常数数组不对,那就是常数数组不对了)。而这里的根源就是COUNTIF的第一参数是要求range的。
这个时候可能有朋友会说,不错不错,但这样的错误一般不会去犯。恩,这是最直接的情况,当然很少回去犯,即使犯了也很快会意识到错误所在。但完成一个任务,函数经常是像积木一样灵活组合的。就是说,那个常数数组你是不会直接去用,但如果嵌套时,COUNTIF的第一参数是由其他函数的返回值充当的,这个时候这个错误就具有隐秘性了,不太容易发现。
如:我们使用嵌套,依然是条件计数:=COUNTIF(OFFSET(A1,,,10,),">5"),这里OFFSET函数返回的是一个单元格区域引用,所以结果正确。(OFFSET如果不熟悉,那么建议使用前文介绍“自学函数”一文自我修炼一下,这个函数很灵活,在初级阶段你回爱上他的,呵呵)
另一个公式: =countif(match(A1:A10,A1:A10,0),">5"),这里MATCH函数返回结果作为COUNTIF的第一参
数,但这个返回结果的属性是纯数组,没有单元格引用的属性,所以报错。
在这个情况下要迅速扎到出错根源相对就难了,需要一定的积累。所以,我觉得通过本节大家多留心,知道有这么回事,那么出现此类错误时可能就会想到了,那就会大大节省你的时间。
本节就是留心留意函数参数类型,重点关注range、reference的参数类型,这些是有限制的。爱她,更要了解她,强迫她做他不能做的事情显然是要搞僵的,呵呵。
另外,本节提到的 归一性 法则很有用,尤其在纠错、统计分析某些规律的时候
==========================================================================================
续:
形参类型为array(数组)、vector(向量,其实就是一维的数组,就是说也是数组)就比较灵活了,用单元格区域引用可以,用常数数组可以,用数组公式传递的内存数组也可以,这就大大的加强了这类函数的功能。因为函数要实现某种功能主要还是要组合运用的,要实现复杂的功能的更是数组来数组去的,因此参数是否能接受内存数组将大大影响这个函数在数组公式应用中的地位的。
=vlookup(lookup_value,table_array,col_index_num,range_lookup),这里的table_array就比较好伺候了,大家可以看下图:
上图表达的是根据 姓名 返回 学号,这里函数有点吃不透不要紧,这里的重点是说array类型的参数比较好招呼,这里用CHOOSE函数返回了一个array,完成的任务是让 姓名 位于第一列。
功能性描述的参数也不限定非得使用单元格区域。使用功能性的词来描述参数也许正是因为Excel没有必要强调他非得是单元格引用吧。这类参数可以试探性使用常数数组或内存数组以实现数组应用。这话听上去没有什么,但看一下你会比较有感觉的。
本贴续的部分两个公式都比较难,有兴致的同学可以揣摩一下,如果有点领悟也算是数组公式有点启蒙了,呵呵。
本贴续的部分两个公式都比较难,有兴致的同学可以揣摩一下,如果有点领悟也算是数组公式有点启蒙了,呵呵。
上面列了一个VLOOKUP函数的语法结构提示,也许有同学会感叹“胡版好耐心” ,“一个一个码字,而且丝毫不差,佩服”。其实这里有一个快捷方式将这个 函数提示公式 直接复制到单元格的。具体过程就是在调出 函数提示工具 时按 <Ctrl+Shift+Enter>组合键,如下图。上眼,呵呵
上图中应改为<Ctrl+SHIFT+A>组合键
如果您有函数公式方面的任何想法、疑问那么请您直接跟帖,如果有小巧的例子以更透析的说明问题,那么还可以Email至sword0227@189.cn,胡剑需要您的帮助。邮件不一定回复,但胡剑感谢您的支持!永久有效
[ 本帖最后由 胡剑0227 于 2011-1-11 12:13 编辑 ]
|
评分
-
1
查看全部评分
-
|