ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] ㊣EXCEL巴科斯诺尔范式专辑-00-乱弹函数与公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-27 21:45 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
儒道佛难度评级:★★★☆☆ of ★★★★★
更多儒道佛文章http://club.excelhome.net/viewth ... e%3D1&frombbs=1
我要联系儒道佛:bye the MSN rdf@mye.cn

下载:↘


缘起:引用运算专辑-02-区域、交集、联合的运算详解,需要对引用的各类组合做一个完整的分析和理解,在此基础上进一步探索。

说明:本编写的比较混乱,但不妨碍阅读理,可能还存在一些错误暂时无法修正。另一方面可以先熟悉一些概念,所以标题定义从-00-开始。参考资料本身有很大的问题,而且不够全面,所以准备重新思考并组织一下,需要一点时间。下一编打算从数组的BNF开始,做一些思考(其实首先是学习)。理解BNF可以从大局上掌握函数公式的所有要素,可否把精华重新回锅提炼,并拾遗补缺,我的EXCEL的水平着实有限,由于项目的缘故,有所涉及,故借春节闲暇之时,在这里恶补,收获非常大,对论坛和各位版主及版友的辛勤劳动致以崇高的敬意,说一声谢谢。我将会在能力所能及的范围内,毫无保留与大家分享一些小小的经验。我的写作风格是想到一点,就马上先表达出来,所以有时候显的比较凌乱,甚致有一些错误,还请诸位能够多多谅解。

====
目录
====
1、什么是BNF
2、...

注:以下内容均以EXCEL2003为例,2007可以参照。
拟题:《引用的密秘》

[ 本帖最后由 儒道佛 于 2009-3-27 12:33 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 21:46 | 显示全部楼层

1、公式

==tmp==
澄清一些概念,因为不太清楚论坛里一般怎么称呼...
引用
单元格引用
区域引用
向量引用
行向量引用
列向量引用
三维表区域引用
注:以下表是在excel2000的基础上整理的,仍然存在很多问题,对于各种函数的引用认知,正在学习中,请等待一段时间。欢迎指正...
===end of tmp====

公式 ::= "=" <表达式>
数组公式? ::= "=" "{" <表达式> "}"
        表达式 ::= <基础值> | <单元格引用> | <函数> | ...

三维表引用? ::= <表名><联合操作符?><表><单元格引用>
带前缀引用? ::= (<工作簿> | <表> | ε ) <引用>    注1
        工作簿 ::= "["路径/文件名.xls"]" <表>
                表 ::= <表名>"!"
                        表名 ::= <工作表名称>
        引用 ::= <单元格引用> | <区域引用?>
                区域引用? ::= <区域> | <交集> | <联合> | <向量>
                单元格引用 ::= ["$"]<列>["$"]<行>
                        行 ::= x | x ε Int,  0 < x ≤ 65536    注2
                        列 ::= [A-Z] | [A-H][A-Z] | I[A-Z]    注3



注1:ε表示""或NULL
注2:行值范围在[1..65536](EXCEL2003)
注3:列值范围在[1..256]由'A' 到 'Z'的字符来表示(EXCEL2003)

[ 本帖最后由 儒道佛 于 2009-1-28 21:58 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 21:56 | 显示全部楼层

2、引用风格

相对/绝对引用
帮助中都有描述,不写了。

R1C1引用
帮助中都有描述,不写了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 22:08 | 显示全部楼层

3、区域引用操作

区域 ::= <单元格引用><区域操作符?><单元格引用>
交集 ::= <区域引用?><交集运算符?><区域引用?>
联合 ::= <区域引用?><联合运算符?><区域引用?>
向量 ::= <列向量区域?> | <行向量区域?>
        列向量区域? ::= <列><区域操作符?><列>(注1)
        行向量区域? ::= <行><区域操作符?><行>(注2)

注1:第一列必须≤第二列.
注2:第一行必须≤第二行.

可参考儒道佛的贴子《㊣区域、联合、交集引用运算优先级判定》

[ 本帖最后由 儒道佛 于 2009-1-28 21:59 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 22:13 | 显示全部楼层

4、运算符

运算符 ::=  <比较运算符?> | <数术运算符?> | <文本连接运算符?> | <引用运算符?>
        比较运算符? ::= ">=" | "<=" | "≥" | "≤" | "<>" | "="
        数术运算符? ::= <加减运算符?> | <负号运算符?> | <乘方运算符?> | <百分比运算符?>
                加减运算符? ::= "+" | "-"
                负号运算符? ::= "-"
                乘方运算符? ::= "^"
                百分比运算符? ::= "%"
        文本连接运算符? ::= "&"
        引用运算符? ::= <区域运算符?> | <联合运算符?> | <交集运算符?>
                区域运算符? ::= ":"
                联合运算符? ::= ","
                交集运算符? ::= " "

[ 本帖最后由 儒道佛 于 2009-1-28 19:38 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 22:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

4.1运算符优先级

帮助中都有,
打算简单介结一下,
主要是想澄清论坛中常见的一些误解。

特意摘录EXCEL规范文档内容如下:
SymbolOperatorOrder of  Precedence
Colon (:)Range1st
A spaceIntersection2nd
Comma (,)Union3rd
-Negation4th
%Percent5th
^Exponentiation6th
* and /Multiplication  and division7th
+ and -Addition  and subtraction8th
&Text  concatenation9th
=, <, >, <=, >=, and <>Comparison10th


以上表格不同于HELP文档的含糊说明,明确指出了优先级关系。
这里提两个误解。
1)在的官方HELP文档中,引用运算符和条件运算符的排版风格容易造成以下两种误解:
    (这里感谢一下水星兄弟,在没有做测试前,我也理解错了,用关系运算符去推测引用运算符的优先级)
    A)引用运算符运算级不同,类似的关系运算符运算级不同。
    B)引用运算符运算级相同,类似的关系运算符运算级相同。
    上述两点两种观点其都是错的。
2)在OFFICEBAR的文档中有一文中提到了引用运算符的优先级。
    文中把引用、联合、区域运算作为同级,这个显然还是错的。

其实这张表还不够全,从BNF中看,还漏了一些内容:
第四级还包括
-         negative
+         plus
$         Next componen
还可以加上括号运算符
Left SideRight SideOperation
""string constant
{}array constant
()arithmetic grouping or functionarguments or reference grouping
''grouping worksheet name
[]grouping workbook name, orrelative reference in R1C1 style


[ 本帖最后由 儒道佛 于 2009-1-29 15:03 编辑 ]

OfficeBar's error

OfficeBar's error

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 22:17 | 显示全部楼层

5、基础值

基础值 ::= 数值 | 逻辑值 | 字符串 | 日期

[ 本帖最后由 儒道佛 于 2009-1-27 22:20 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 22:20 | 显示全部楼层

6、函数

函数 ::= (Function_LOGICAL | Function_FINANCIAL | Function_STATISTICAL | Function_MATHANDTRIG |

Function_DATABASE | Function_DATEANDTIME | Function_ENGINEERING | Function_TEXT |  Function_INFORMATION | Function_LOOKUPANDREFERENCE)

Function_LOOKUPANDREFERENCE ::= ("ADDRESS" | "AREAS" | "CHOOSE" | "COLUMN" | "COLUMNS" | "HLOOKUP" | "HYPERLINK" | "INDEX" | "INDIRECT" | "LOOKUP" | "MATCH" | "OFFSET" | "ROW" | "ROWS" | "TRANSPOSE" | "VLOOKUP")

Function_INFORMATION ::= ("CELL" | "COUNTBLANK" | "ERROR.TYPE" | "INFO" | "ISBLANK" | "ISERR" | "ISERROR" | "ISEVEN" | "ISLOGICAL" | "ISNA" | "ISNONTEXT" | "ISNUMBER" | "ISODD" | "ISREF" | "ISTEXT" | "N" | "NA" | "TYPE")

Function_FINANCIAL ::= ("ACCRINT" | "ACCRINTM" | "AMORDEGRC" | "AMORLINC" | "COUPDAYBS" | "COUPDAYS" | "COUPDAYSNC" | "COUPNCD" | "COUPNUM" | "COUPPCD" | "CUMIPMT" | "CUMPRINC" | "DB" | "DDB" | "DISC" | "DOLLARDE" | "DOLLARFR" | "DURATION" | "EFFECT" | "FV" | "FVSCHEDULE" | "INTRATE" | "IPMT" | "IRR" | "MDURATION" | "MIRR" | "NOMINAL" | "NPER" | "NPV" | "ODDFPRICE" | "ODDFYIELD" | "ODDLPRICE" | "ODDLYIELD" | "PMT" | "PPMT" | "PRICE" | "PRICEDISC" | "PRICEMAT" | "PV" | "RATE" | "RECEIVED" | "SLN" | "SYD" | "TBILLEQ" | "TBILLPRICE" | "TBILLYIELD" | "VDB" | "XIRR" | "XNPV" | "YIELD" | "YIELDDISC" | "YIELDMAT")

Function_ENGINEERING ::= ("BESSELI" | "BESSELJ" | "BESSELK" | "BESSELY" | "BIN2DEC" | "BIN2HEX" | "BIN2OCT" | "COMPLEX" | "CONVERT" | "DEC2BIN" | "DEC2HEX" | "DEC2OCT" | "DELTA" | "ERF" | "ERFC" | "GESTEP" | "HEX2BIN" | "HEX2DEC" | "HEX2OCT" | "IMABS" | "IMAGINARY" | "IMARGUMENT" | "IMCONJUGATE" | "IMCOS" | "IMDIV" | "IMEXP" | "IMLN" | "IMLOG10" | "IMLOG2" | "IMPOWER" | "IMPRODUCT" | "IMREAL" | "IMSIN" | "IMSQRT" | "IMSUB" | "IMSUM" | "OCT2BIN" | "OCT2DEC" | "OCT2HEX")

Function_DATEANDTIME ::= ("DATE" | "DATEVALUE" | "DAY" | "DAYS360" | "EDATE" | "EOMONTH" | "HOUR" | "MINUTE" | "MONTH" | "NETWORKDAYS" | "NOW" | "SECOND" | "TIME" | "TIMEVALUE" | "TODAY" | "WEEKDAY" | "WORKDAY" | "YEAR" | "YEARFRAC")

Function_DATABASE ::= ("DAVERAGE" | "DCOUNT" | "DCOUNTA" | "DGET" | "DMAX" | "DMIN" | "DPRODUCT" | "DSTDEV" | "DSTDEVP" | "DSUM" | "DVAR" | "DVARP" | "GETPIVOTDATA")

Function_MATHANDTRIG ::= ("ABS" | "ACOS" | "ACOSH" | "ASIN" | "ASINH" | "ATAN" | "ATAN2" | "ATANH" | "CEILING" | "COMBIN" | "COS" | "COSH" | "COUNTIF" | "DEGREES" | "EVEN" | "EXP" | "FACT" | "FACTDOUBLE" | "FLOOR" | "GCD" | "INT" | "LCM" | "LN" | "LOG" | "LOG10" | "MDETERM" | "MINVERSE" | "MMULT" | "MOD" | "MROUND" | "MULTINOMIAL" | "ODD" | "PI" | "POWER" | "PRODUCT" | "QUOTIENT" | "RADIANS" | "RAND" | "RANDBETWEEN" | "ROMAN" | "ROUND" | "ROUNDDOWN" | "ROUNDUP" | "SERIESSUM" | "SIGN" | "SIN" | "SINH" | "SQRT" | "SQRTPI" | "SUBTOTAL" | "SUMIF"+")" | "("+"SUM" | "SUMPRODUCT" | "SUMSQ" | "SUMX2MY2" | "SUMX2PY2" | "SUMXMY2" | "TAN" | "TANH" | "TRUN")

Function_STATISTICAL ::= ("AVEDEV" | "AVERAGE" | "AVERAGEA" | "BETADIST" | "BETAINV" | "BINOMDIST" | "CHIDIST" | "CHIINV" | "CHITEST" | "CONFIDENCE" | "CORREL" | "COUNT" | "COUNTA" | "COVAR" | "CRITBINOM" | "DEVSQ" | "EXPONDIST" | "FDIST" | "FINV" | "FISHER" | "FISHERINV" | "FORECAST" | "FREQUENCY" | "FTEST" | "GAMMADIST" | "GAMMAINV" | "GAMMALN" | "GEOMEAN" | "GROWTH" | "HARMEAN" | "HYPGEOMDIST" | "INTERCEPT" | "KURT" | "LARGE" | "LINEST" | "LOGEST" | "LOGINV" | "LOGNORMDIST" | "MAX" | "MAXA" | "MEDIAN" | "MIN" | "MINA" | "MODE" | "NEGBINOMDIST" | "NORMDIST" | "NORMINV" | "NORMSDIST" | "NORMSINV" | "PEARSON" | "PERCENTILE" | "PERCENTRANK" | "PERMUT" | "POISSON" | "PROB" | "QUARTILE" | "RANK" | "RSQ" | "SKEW" | "SLOPE" | "SMALL" | "STANDARDIZE" | "STDEV" | "STDEVA" | "STDEVP" | "STDEVPA" | "STEYX" | "TDIST" | "TINV" | "TREND" | "TRIMMEAN" | "TTEST" | "VAR" | "VARA" | "VARP" | "VARPA" | "WEIBULL" | "ZTEST")

Function_TEXT ::= ("CHAR" | "CLEAN" | "CODE" | "CONCATENATE" | "DOLLAR" | "EXACT" | "FIND" | "FIXED" | "LEFT" | "LEN" | "LOWER" | "MID" | "PROPER" | "REPLACE" | "REPT" | "RIGHT" | "SEARCH" | "SUBSTITUTE" | "T" | "TEXT" | "TRIM" | "UPPER" | "VALUE")

Function_LOGICAL ::= ("IF" | "AND" | "OR" | "NOT" | "TRUE" | "FALSE");

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-27 22:27 | 显示全部楼层

占位

开放回复,本占位为用于整理各种意见,及新的发现。

本人的强项不是EXCEL,由于还是“初学者(用的年头长了,研究时间尚短,本人的MASHUPS项目中跟EXCEL有密切相关的部分,需要一些元数据的支持。)”,还请各位坛友多多指教,多多帮助。
尤其是术语方面,请版主及朋友请予一些提示,手头关于EXCEL的规范为英文版式。

Cell
Reference
AreaReference
3DSheetReference
Range
Ref

[ 本帖最后由 儒道佛 于 2009-1-28 23:33 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-28 22:39 | 显示全部楼层

再提供一些语法参考

/ evaluate:

====基本引用====
sheet:{((!#y),/:\:!#*y)cell[x]''y;}                                        / calculate sheet
cell:{:[-3=4:z;.[`.W;x,y;:;eval[x;y;value parse 1_ z]]. x,y;z]}                / calculate cell
value:{:[("R"~*x)|(*x)_in R;("VALUE";x);~4:x;@[x;1_!#x;_f];x]}                / insert VALUE
eval:{:[4:z;leaf[x;y;z];(.*z)._f[refer[x;*z];y]'1_ z]}                        / evaluate expression
refer:{:[y~"OF";`$y 1;x]}                                                / refer to sheet!
leaf:{(.:;r1c1[x;y];`$)[(|/'(*z)=(D;"R"))?1;z]}                                / evaluate leaf
rel:{:["["_in y;x+z;z-1]}                                                / relative reference
AT:{@[y;0;:;x]}                                                                / sheet reference
VALUE:{:[~4:x 1;_f'+x;cell[*x;x 1]`.W[*x]. x 1]}                        / cell value

====单元引用====
r1c1:{(x;++rc'[^`.W x;y;(0,z?"C")_ z:(),z])}                                / "RxCy" -> cell
rc:{:[0=#z;!x;1=#z;y;rel[y;z].(0$z _dvl"RC[]")]}                        / z = R/C, R/Cn, R/C[n]

===引用运算====
INTERSECT:{(*x;x[1]@&x[1]_lin y 1)}                                        / intersect cells
UNION:{(*x;?(x;y)[;1])}                                                        / union cells
RANGE:{(*x;,/,/:\:/x[1]+!:'1+*-':(x;y)[;1])}                                / cell range
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 08:21 , Processed in 0.057468 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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