ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 33752|回复: 78

[讨论] 关于函数参数的省略与简写

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2006-1-25 16:13 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:公式基础

有些函数的参数可以用简化或者省略以达到缩短公式的目的,但怎样才算合理、正确的简化呢?希望各位会员朋友在此写一写吧。

我开个头:true、false用1、0代替。

 vlookup(lookup_value,table_array,col_index_num,range_lookup)(或者hlookup)的最后一个参数,若省略或为true则大致匹配。

所以我们会用=vlookup(A1,B:C,2,0)类似的东西来精确查找引用

用vlookup(A1,B:C,2)——省略第四个参数是大致匹配,而vlookup(A1,B:C,2,)——省略第四个参数但没省略之前的逗号却还是精确匹配的!!!

match最后参数也是如此,可以省略0或false,但不要省略前面的那个逗号就是精确匹配了。

 

注意】帮助文件说false是大致匹配是错误的——应该是精确匹配

 

《Excel函数与公式实战技巧精粹》已明确“省略”和“简写”概念,详见第15楼http://club.excelhome.net/viewthread.php?tid=147926&page=1#pid2983656

 

 

 

一、概念分析

1、示例:


省略过程

简写过程

公式1
= VLOOKUP(C1,A:B,2,TRUE)

公式4
=VLOOKUP(C1,A:B,2FALSE)

公式2
=VLOOKUP(C1,A:B,2,1)

公式5
=VLOOKUP(C1,A:B,20)

公式3
=VLOOKUP(C1,A:B,2)

公式6
=VLOOKUP(C1,A:B,2)

关于“省略”一词,Excel自身帮助文件的说法是比较含糊的,有时候是“省略”有时候是“忽略”,但针对上面表中两列共6个公式,大家可以比较一下,显然:左边3个公式是相互等价的,右边3个公式也是相互等价的。

【问题】如果不分青红皂白都说第4参数“省略”了,很显然就不能区分精确匹配和大致匹配。

【创新】在编著《Excel函数与公式实战技巧精粹》一书过程中,经过反复推敲,最后明确了“省略”与“简写”两个概念:
公式3这种整个参数都去掉的情况,称为VLOOKUP第4参数省略
公式6这种保留参数前面的逗号的情况,称为VLOOKUP第4参数简写

MATCH函数也是如此,当然,对此概念并非所有人都接受,正如对于“数组公式”的概念争议一样,最终约定俗成使用统一的概念,才能方便学习。

2、论证过程

(1)被省略的一个关键词:
前段时间看到英文版的帮助文件,并与中文版进行部分对比时,发现英文版帮助文件在描述“省略”或者“简写”时,都使用omitted(省略了的)一词,也难怪中文版的“省略”引起理解的歧义,不过英文版的参数描述中第一个词却是Required.(必需的) Optional.(可选的)比如IF函数的帮助文件中关于参数的描述:
logical_test  Required. …………
value_if_true  Required. …………
value_if_false  Optional.…………

中文版帮助信息没有这个词

(2)VBA中的函数与工作表函数区别
1)VBA帮助中关于参数描述,会标明必选(或必要)、可选。
比如:
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) DateDiff 函数语法中有下列命名参数:
部分 描述
interval 必要。字符串表达式,表示用来计算date1 和 date2 的时间差的时间间隔
Date1□date2 必要;Variant (Date)。计算中要用到的两个日期。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年的第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。


2)VBA中的函数可选参数,是可以跳过,而工作表函数的参数则是“一个萝卜一个坑”,不可跳过
比如,运行下面这个程序:
  1. Sub test()<BR>Range("b1") = DateDiff("ww", "2009-1-1", Now, , 2)<BR>End Sub
复制代码
  1. Sub test()<BR>Range("b1") = DateDiff("ww", "2009-1-1", Now, 2)<BR>End Sub
复制代码
的效果都是一样的,也就是说DateDiff函数参数变成了DateDiff(interval, date1, date2, firstweekofyear) ,直接跳过Firstdayofweek。

但是工作表函数IF(logical_test,value_if_true,value_if_false),却不可能变为IF(logical_test,value_if_false)


【结论】
综上所述,个人认为:
1、工作表函数参数如果为“可选”参数,则从最后一个参数起,可以依次省略(即整个参数位置全部去掉),比如:
OFFSET(reference,rows,cols,height,width)
可以用OFFSET(reference,rows,cols,height)——省略了width参数
或者用OFFSET(reference,rows,cols)——省略了height和width参数

2、而函数的部分参数(不一定需要“可选”参数),可以使用逗号保留参数位置,这种用法为“简写”,比如:
可以用OFFSET(reference,rows,cols,,width)——简写了height参数
或者用OFFSET(reference,,cols)——简写了rows参数,并省略了height和width参数。

[ 本帖最后由 gouweicao78 于 2009-12-9 10:14 编辑 ]

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-1-25 16:26 | 显示全部楼层

来一个:

INDIRECT(ref_text,a1)

如果 a1 为 TRUE 或省略,ref_text 被解释为 A1-样式的引用。

如果 a1 为 FALSE,ref_text 被解释为 R1C1-样式的引用。

TA的精华主题

TA的得分主题

发表于 2006-1-25 16:28 | 显示全部楼层

我也来顶一下:

left("wintercom",)=""

left("wintercom")="w"

TA的精华主题

TA的得分主题

发表于 2006-1-25 16:54 | 显示全部楼层

TRUNC(number,num_digits)

=TRUNC(1.236)=1 'Num_digits 省略为默认值为0。

=TRUNC(1.236,2)=1.23

=TRUNC(3456,-2)=3400

TA的精华主题

TA的得分主题

发表于 2006-1-25 17:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

呵呵,我刚想写一帖:某些容易被忽略或忘记的函数参数。楼主既然发了这帖,我就不啰嗦了,让大家在这里跟帖吧。

SUBSTITUTE(text,old_text,new_text,instance_num)

=SUBSTITUTE("你好我好大家好","好",)="你我大家"

=SUBSTITUTE("你好我好大家好","好",,2)="你好我大家好"

FIND(find_text,within_text,start_num)

FINDB(find_text,within_text,start_num)

=FIND("好","你好我好大家好")=2

=FIND("好","你好我好大家好",3)=4

SEARCH(find_text,within_text,start_num)

SEARCHB(find_text,within_text,start_num)

SEARCH与FIND差别不太大,大家再自己试试。

TA的精华主题

TA的得分主题

发表于 2006-1-25 17:45 | 显示全部楼层

OFFSET(a1,0,0)=OFFSET(a1,0,0,1,1)

OFFSET(a1:c5,0,0)=OFFSET(a1:c5,0,0,5,3)=OFFSET(a1:c5,,,)

[此贴子已经被作者于2006-1-25 17:47:45编辑过]

TA的精华主题

TA的得分主题

发表于 2006-1-25 23:51 | 显示全部楼层
SUMIF(A1:A10,C1,B1:B10)=SUMIF(A1:A10,C1,B1)

TA的精华主题

TA的得分主题

发表于 2006-1-26 00:01 | 显示全部楼层

WEEKDAY(serial_number,return_type)

1 或省略 数字 1(星期日)到数字 7(星期六)。

2 数字 1(星期一)到数字 7(星期日)。

3 数字 0(星期一)到数字 6(星期日)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-3-10 16:47 | 显示全部楼层
2楼 INDIRECT(ref_text,a1)——a1省略但逗号不省略的效果和1楼这些函数一样,相当于false。 5楼 SUBSTITUTE(text,old_text,new_text,instance_num)函数中——new_text是要替换的新的字符,如果要去除,正规写都写"",我则只写逗号——哈哈,发现不少函数都可以在逗号之后嘎然而止!
[此贴子已经被作者于2006-3-10 17:20:08编辑过]

TA的精华主题

TA的得分主题

发表于 2006-3-11 00:43 | 显示全部楼层

来个最简单的:if(false,1,0)=if(false,1,)

[此贴子已经被作者于2006-3-11 0:44:58编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 02:06 , Processed in 0.039568 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表