计算机内的每一个字符都有一个编码相对应。例如:字符A就有一个ANCI数字代码65相对应。大写字母A-----Z相对应的编码是65-----90,小写字母a-----z相对应的编码是97-----122。CODE函数,就是返回文本字符串中第一个字符的ANCI数字代码。
一、判断每个单元格首字符是否为英文字母,包括大写字母、小写字母。
在B2单元格输入以下公式:
=OR(AND(CODE(A2)>64,CODE(A2)<91),AND(CODE(A2)>96,CODE(A2)<123))
按下[Enter] 键后,公式将对A2单元格进行判断。双击单元格的填充柄,将
公式向下填充,结果如图所示。
公式说明:
本例利用CODE函数计算单元格第一个字符的字符代码,如果该代码在
65~ 90之间,或者在97~ 122之间,那么就表示首字符是字母。其中65~ 90之
间表示大写字母,97~ 122之间是小写字母。
使用注意:
(1) CODE函数用于计算文本字符串中第一个字符的数字代码,也就是说单元
格中不管有多少个字符,仅仅计算出一个字符的数字代码。
(2) CODE函数用于计算字符的字符代码,而CHAR函数可以根据字符码产
生字符,在功能上与CODE相反(也有少数情况例外)。
(3)根据本例的公式,也可以简化成如下数组公式。
=SUM(N(CODE(A2)> {64,96} ),N(CODE(A2)<{91,123}))=3
案例链接:
思考:判断单元格首字符是否为数字。
提示:数字0~9的字符码在48~ 57之间。
二、分别计算每个单元格中的数字个数。
打开数据文件,在B2单元格输入以下数组公式:
=SUM(IFERROR((CODE(MID(A2,ROW($1:$999), 1))>47)*(CODE(MID(A2,R
OW($1:$999),1))<58),0))
按下[Ctrl Shift Enter]组合键后,公式将返回A2单元格的数字个数。双击单
元格的填充柄,将公式向下填充,结果如图所示。
公式说明:
数字0~ 9的字符码在48~ 57之间。所以本例公式使用ROW函数生成1~ 999
的序号,再配合MID函数提取第1个、第2个.....第999个字符,接着使用CODE
函数判断它是否大于47且小于58,如果符合条件则按I参与求和,不符合条件则
按0参与求和。
之所以使用ROW($1:$999)是因为单元格中的字符通常不会超过999个字,但
有可能超过99个,从字符串中提取第一个1 ~第999个字符可以确保不产生遗漏,同时
又不会导致运算量太大。
当ROW($1:$999)生成的序列号超出实际的单元格字符数量时,MID函数只能
生成空文本,CODE函数字符空文本的字符码只能得到错误值,因此在CODE以外
需要使用IFERROR函数将错误值转换为0,然后再使用SUM函数求和。
使用注意:
字符码同时满足大于47、小于58两个条件时才是数字,因此本例公式直接将
两个表达式相乘,由于只有TRUE乘以TRUE才等于1, TRUE乘以FALSE以及
FALSE乘以FALSE都等于0,所以两个表达式相乘的结果同时满足两个条件者当作
1处理,其他条件都当作0处理。最终的结果是同时满足两个条件的字符数量。
案例链接:
思考:计算单元格中的非数字个数。
提示:将“>”改为“<=”,将“<”改为“>=”,同时将两个条件间的“*”改为“ ”。
三、分别计算每个单元格中大写加小写字母的个数。
打开数据文件,在B2单元格输入以下数组公式:
=SUM(IFERROR((CODE(UPPER(MID(A2,ROW($1:$9)1)))>64)*(CODE(UPPER(
MID(A2,ROW($1:$9)1)))<91),0))
按下[Ctrl Shift Enter]组合键后,公式将返回A2单元格的字母个数。双击单
元格的填充柄,将公式向下填充,结果如图所示。
公式说明:
字母分为大写和小写两种,而且大写字母和小写字母的字符码并不连续,其中大写字母的字符代码在65~ 90之间,小写字母的字符代码在97~ 122之间。本例
公式首先将所有字母都转换成大写,再计算其字符码,可以减少两次判断,仅需要
符合“大于64”和“小于91”两个条件即可。
使用注意:
(1)本例也可以使用LOWER函数将所有字符转换成小写字母,再提取其他符
码。将比较范围64和91分别改成96和123即可。
(2) UPPER函数用于将字母转换成大写形式,它只对字母有效,对数字、汉
字和标点符号无效。由于要求同时统计大小写字母的数量,为了避免判断两次,使
用UPPER函数将字符串中的一切字母都统一转换成大写形式,然后只需再计算一-次
大写字母的数量即可,否则既要计算大写字母数量还要计算小写字母数量。
(3)本例可以利用常量数组作比较对象来缩减公式长度,公式如下:
=SUM(IFERROR((CODE(UPPER(MID(A2,ROW(19999),)))>{64,91}) *{1,-
1},0))
案例链接:
思考:计算单元格中非字母个数。
提示:相对于本例修改比较运算,同时将两个条件间的“*”改为“ ”即可。