注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有明天的博客

__没有约定,但有默契

 
 
 

日志

 
 

【转载】Excel函数应用  

2017-06-27 15:11:35|  分类: 电脑知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自Night Wolf《Excel函数应用》

    所谓文本函数,就是可以在公式中处理文字串的函数。例如,可以改变大小写或确定文字串的长度;可以替换某些字符或者去除某些字符等。而日期和时间函数则可以在公式中分析和处理日期值和时间值。关于这两类函数的列表参看附表,这里仅对一些常用的函数做简要介绍。
一、文本函数
(一)大小写转换
LOWER--
将一个文字串中的所有大写字母转换为小写字母。
UPPER--
将文本转换成大写形式。
PROPER--
将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。
这三种函数的基本语法形式均为 函数名(text)。示例说明:
已有字符串为:pLease ComE Here! 可以看到由于输入的不规范,这句话大小写乱用了。
通过以上三个函数可以将文本转换显示样式,使得文本变得规范。参见图1
Lower
pLease ComE Here!= please come here!
upper
pLease ComE Here!= PLEASE COME HERE!
proper
pLease ComE Here!= Please Come Here!

 

(二)取出字符串中的部分字符


您可以使用MidLeftRight等函数从长字符串内获取一部分字符。具体语法格式为
LEFT
函数:LEFT(text,num_chars)其中Text是包含要提取字符的文本串。Num_chars指定要由 LEFT 所提取的字符数。
MID
函数:MID(text,start_num,num_chars)其中Text是包含要提取字符的文本串。Start_num是文本中要提取的第一个字符的位置。
RIGHT
函数:RIGHT(text,num_chars)其中Text是包含要提取字符的文本串。Num_chars指定希望 RIGHT 提取的字符数。
比如,从字符串"This is an apple."分别取出字符"This""apple""is"的具体函数写法为。
LEFT("This is an apple",4)=This
RIGHT("This is an apple",5)=apple
MID("This is an apple",6,2)=is

 

(三)去除字符串的空白
在字符串形态中,空白也是一个有效的字符,但是如果字符串中出现空白字符时,容易在判断或对比数据是发生错误,在Excel中您可以使用Trim函数清除字符串中的空白。
语法形式为:TRIM(text)其中Text为需要清除其中空格的文本。
需要注意的是,Trim函数不会清除单词之间的单个空格,如果连这部分空格都需清除的话,建议使用替换功能。比如,从字符串"My name is Mary"中清除空格的函数写法为:TRIM("My name is Mary")=My name is Mary 参见图3

 

(四)字符串的比较
在数据表中经常会比对不同的字符串,此时您可以使用EXACT函数来比较两个字符串是否相同。该函数测试两个字符串是否完全相同。如果它们完全相同,则返回 TRUE;否则,返回 FALSE。函数 EXACT 能区分大小写,但忽略格式上的差异。利用函数 EXACT 可以测试输入文档内的文字。语法形式为:EXACT(text1,text2)Text1为待比较的第一个字符串。Text2为待比较的第二个字符串。举例说明:参见图4
EXACT("China","china")=False

 

二、日期与时间函数
在数据表的处理过程中,日期与时间的函数是相当重要的处理依据。而Excel在这方面也提供了相当丰富的函数供大家使用。
(一)取出当前系统时间/日期信息
用于取出当前系统时间/日期信息的函数主要有NOWTODAY
语法形式均为 函数名()。
(二)取得日期/时间的部分字段值

如果需要单独的年份、月份、日数或小时的数据时,可以使用HOURDAYMONTHYEAR函数直接从日期/时间中取出需要的数据。具体示例参看图5
比如,需要返回2001-5-30 12:30 PM的年份、月份、日数及小时数,可以分别采用相应函数实现。
YEAR(E5)=2001
MONTH(E5)=5
DAY(E5)=30
HOUR(E5)=12

 

此外还有更多有用的日期/时间函数,可以查阅附表。下面我们将以一个具体的示例来说明Excel的文本函数与日期函数的用途。
三、示例:做一个美观简洁的人事资料分析表
1
、 示例说明
在如图6所示的某公司人事资料表中,除了编号、员工姓名、身份证号码以及参加工作时间为手工添入外,其余各项均为用函数计算所得。

 

在此例中我们将详细说明如何通过函数求出:
1)自动从身份证号码中提取出生年月、性别信息。
2)自动从参加工作时间中提取工龄信息。
2
、身份证号码相关知识
在了解如何实现自动从身份证号码中提取出生年月、性别信息之前,首先需要了解身份证号码所代表的含义。我们知道,当今的身份证号码有15/18位之分。早期签发的身份证号码是15位的,现在签发的身份证由于年份的扩展(由两位变为四位)和末尾加了效验码,就成了18位。这两种身份证号码将在相当长的一段时期内共存。两种身份证号码的含义如下:
115位的身份证号码:1~6位为地区代码,7~8位为出生年份(2)9~10位为出生月份,11~12位为出生日期,第13~15位为顺序号,并能够判断性别,奇数为男,偶数为女。
218位的身份证号码:1~6位为地区代码,7~10位为出生年份(4)11~12位为出生月份,13~14位为出生日期,第15~17位为顺序号,并能够判断性别,奇数为男,偶数为女。18位为效验位。
3
、 应用函数
在此例中为了实现数据的自动提取,应用了如下几个Excel函数。
1IF函数:根据逻辑表达式测试的结果,返回相应的值。IF函数允许嵌套。
语法形式为:IFlogical_test, value_if_true,value_if_false
2CONCATENATE:将若干个文字项合并至一个文字项中。
语法形式为:CONCATENATE(text1,text2……)
3MID:从文本字符串中指定的起始位置起,返回指定长度的字符。
语法形式为:MID(text,start_num,num_chars)
4TODAY:返回计算机系统内部的当前日期。
语法形式为:TODAY()
5DATEDIF:计算两个日期之间的天数、月数或年数。
语法形式为:DATEDIF(start_date,end_date,unit)
6VALUE:将代表数字的文字串转换成数字。
语法形式为:VALUE(text)
7RIGHT:根据所指定的字符数返回文本串中最后一个或多个字符。
语法形式为:RIGHT(text,num_chars)
8INT:返回实数舍入后的整数值。语法形式为:INT(number)

4
、 公式写法及解释(以员工Andy为例说明)
说明:为避免公式中过多的嵌套,这里的身份证号码限定为15位的。如果您看懂了公式的话,可以进行简单的修改即可适用于18位的身份证号码,甚至可适用于1518两者并存的情况。
1)根据身份证号码求性别
=IF(VALUE(RIGHT(E4,3))/2=INT(VALUE(RIGHT(E4,3))/2),"
","")
公式解释:a. RIGHT(E4,3)用于求出身份证号码中代表性别的数字,实际求得的为代表数字的字符串
b. VALUE(RIGHT(E4,3)
用于将上一步所得的代表数字的字符串转换为数字
c. VALUE(RIGHT(E4,3))/2=INT(VALUE(RIGHT(E4,3))/2
用于判断这个身份证号码是奇数还是偶数,当然你也可以用Mod函数来做出判断。
d. =IF(VALUE(RIGHT(E4,3))/2=INT(VALUE(RIGHT(E4,3))/2),"
","")及如果上述公式判断出这个号码是偶数时,显示"",否则,这个号码是奇数的话,则返回""
2)根据身份证号码求出生日期
=CONCATENATE("19",MID(E4,7,2),"/",MID(E4,9,2),"/",MID(E4,11,2))
公式解释:a. MID(E4,7,2)为在身份证号码中获取表示年份的数字的字符串
b. MID(E4,9,2)
为在身份证号码中获取表示月份的数字的字符串
c. MID(E4,11,2)
为在身份证号码中获取表示日期的数字的字符串
d. CONCATENATE("19",MID(E4,7,2),"/",MID(E4,9,2),"/",MID(E4,11,2))
目的就是将多个字符串合并在一起显示。

另一种计算讨论

A1=123456198812120010
B1=MID(A1,7,4)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2)

我是这样做的, 可以生成出生日期, 可根据身份证长度计算, 数据在E3
=IF(MID(E3,7,2)="19",DATE(MID(E3,7,4),MID(E3,11,2),MID(E3,13,2)),DATE("19"&MID(E3,7,2),MID(E3,9,2),MID(E3,11,2)))

 因为身份证前6位是固定的, 7位开始是年月日, 旧的15位号码年份为2, 所以要加上19(忘了说一下, 公式只适用20世纪); 新的为4. 从年再往后取日期.

可以分两部,第一步先计算身份证号的位数(也就是15和18位)对应18位的函授是:=mid(a1,7,8);15位的函授是:=IF(MID(E3,7,2)="19",DATE(MID(E3,7,4),MID(E3,11,2),MID(E3,13,2)),DATE("19"&MID(E3,7,2),MID(E3,9,2),MID(E3,11,2)))

经过大家的指教,我经过实践以下函数能同时完成15位或18位的身份证号取出出生年月日(假定身份证号在A1):=IF(LEN(A1)=18,MID(A1,7,4)&""&MID(A1,11,2)&""&MID(A1,13,2)&"","19"&MID(A1,7,2)&""&MID(A1,9,2)&""&MID(A1,11,2)&"")


3)根据参加工作时间求年资(即工龄)
=CONCATENATE(DATEDIF(F4,TODAY(),"y"),"
",DATEDIF(F4,TODAY(),"ym"),"个月")

公式解释:
a. TODAY()
用于求出系统当前的时间
b. DATEDIF(F4,TODAY(),"y")
用于计算当前系统时间与参加工作时间相差的年份
c. DATEDIF(F4,TODAY(),"ym")
用于计算当前系统时间与参加工作时间相差的月份,忽略日期中的日和年。
d. =CONCATENATE(DATEDIF(F4,TODAY(),"y"),"
",DATEDIF(F4,TODAY(),"ym"),"个月")目的就是将多个字符串合并在一起显示。
5.
其他说明
在这张人事资料表中我们还发现,创建日期:31-05-2001时显示在同一个单元格中的。这是如何实现的呢?难道是手工添加的吗?不是,实际上这个日期还是变化的,它显示的是系统当前时间。这里是利用函数 TODAY 和函数 TEXT 一起来创建一条信息,该信息包含着当前日期并将日期以"dd-mm-yyyy"的格式表示。
具体公式写法为:="创建日期:"&TEXT(TODAY(),"dd-mm-yyyy")
至此,我们对于文本函数、日期与时间函数已经有了大致的了解,同时也设想了一些应用领域。相信随着大家在这方面的不断研究,会有更广泛的应用。

 

 


附一:文本函数

函数名

函数说明

语法

ASC

将字符串中的全角(双字节)英文字母更改为半角(单字节)字符。

ASC(text)

CHAR

返回对应于数字代码的字符,函数 CHAR 可将其他类型计算机文件中的代码转换为字符。

CHAR(number)

CLEAN

删除文本中不能打印的字符。对从其他应用程序中输入的字符串使用 CLEAN 函数,将删除其中含有的当前操作系统无法打印的字符。例如,可以删除通常出现在数据文件头部或尾部、无法打印的低级计算机代码。

CLEAN(text)

CODE

返回文字串中第一个字符的数字代码。返回的代码对应于计算机当前使用的字符集。

CODE(text)

CONCATENATE

将若干文字串合并到一个文字串中。

CONCATENATE (text1,text2,...)

DOLLAR

依照货币格式将小数四舍五入到指定的位数并转换成文字。

DOLLAR RMB(number,decimals)

EXACT

该函数测试两个字符串是否完全相同。如果它们完全相同,则返回 TRUE;否则,返回 FALSE。函数 EXACT 能区分大小写,但忽略格式上的差异。利用函数 EXACT 可以测试输入文档内的文字。

EXACT(text1,text2)

FIND

FIND 用于查找其他文本串 (within_text) 内的文本串 (find_text),并从 within_text 的首字符开始返回 find_text 的起始位置编号。

FIND(find_text,within_text,start_num)

FIXED

按指定的小数位数进行四舍五入,利用句点和逗号,以小数格式对该数设置格式,并以文字串形式返回结果。

FIXED(number,decimals,no_commas)

JIS

将字符串中的半角(单字节)英文字母或片假名更改为全角(双字节)字符。

JIS(text)

LEFT

LEFT 基于所指定的字符数返回文本串中的第一个或前几个字符。
LEFTB
基于所指定的字节数返回文本串中的第一个或前几个字符。此函数用于双字节字符。

LEFT(text,num_chars)
LEFTB(text,num_bytes)

LEN

LEN 返回文本串中的字符数。
LENB
返回文本串中用于代表字符的字节数。此函数用于双字节字符。

LEN(text)
LENB(text)

LOWER

将一个文字串中的所有大写字母转换为小写字母。

LOWER(text)

MID

MID 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。
MIDB
返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。此函数用于双字节字符。

MID(text,start_num,num_chars)
MIDB(text,start_num,num_bytes)

PHONETIC

提取文本串中的拼音 (furigana) 字符。

PHONETIC(reference)

PROPER

将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。

PROPER(text)

REPLACE

REPLACE 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。
REPLACEB
使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。此函数专为双字节字符使用。

REPLACE(old_text,start_num,num_chars,new_text)
REPLACEB(old_text,start_num,num_bytes,new_text)

REPT

按照给定的次数重复显示文本。可以通过函数 REPT 来不断地重复显示某一文字串,对单元格进行填充。

REPT(text,number_times)

RIGHT

RIGHT 根据所指定的字符数返回文本串中最后一个或多个字符。
RIGHTB
根据所指定的字符数返回文本串中最后一个或多个字符。此函数用于双字节字符。

RIGHT(text,num_chars)
RIGHTB(text,num_bytes)

SEARCH

SEARCH 返回从 start_num 开始首次找到特定字符或文本串的位置上特定字符的编号。使用 SEARCH 可确定字符或文本串在其他文本串中的位置,这样就可使用 MID REPLACE 函数更改文本。
SEARCHB
也可在其他文本串 (within_text) 中查找文本串 (find_text),并返回 find_text 的起始位置编号。此结果是基于每个字符所使用的字节数,并从 start_num 开始的。此函数用于双字节字符。此外,也可使用 FINDB 在其他文本串中查找文本串。

SEARCH(find_text,within_text,start_num)
SEARCHB(find_text,within_text,start_num)

SUBSTITUTE

在文字串中用 new_text 替代 old_text。如果需要在某一文字串中替换指定的文本,请使用函数 SUBSTITUTE;如果需要在某一文字串中替换指定位置处的任意文本,请使用函数 REPLACE

SUBSTITUTE(text,old_text,new_text,instance_num)

T

将数值转换成文本。

T(value)

TEXT

将一数值转换为按指定数字格式表示的文本。

TEXT(value,format_text)

TRIM

除了单词之间的单个空格外,清除文本中所有的空格。在从其他应用程序中获取带有不规则空格的文本时,可以使用函数 TRIM

TRIM(text)

UPPER

将文本转换成大写形式。

UPPER(text)

VALUE

将代表数字的文字串转换成数字。

VALUE(text)

WIDECHAR

将单字节字符转换为双字节字符。

WIDECHAR(text)

YEN

使用 ¥(日圆)货币格式将数字转换成文本,并对指定位置后的数字四舍五入。

YEN(number,decimals)




附二、日期与时间函数

函数名

函数说明

语法

DATE

返回代表特定日期的系列数。

DATE(year,month,day)

DATEDIF

计算两个日期之间的天数、月数或年数。

DATEDIF(start_date,end_date,unit)

DATEVALUE

函数 DATEVALUE 的主要功能是将以文字表示的日期转换成一个系列数。

DATEVALUE(date_text)

DAY

返回以系列数表示的某日期的天数,用整数 1 31 表示。

DAY(serial_number)

DAYS360

按照一年 360 天的算法(每个月以 30 天计,一年共计 12 个月),返回两日期间相差的天数。

DAYS360(start_date,end_date,method)

EDATE

返回指定日期 (start_date) 之前或之后指定月份数的日期系列数。使用函数 EDATE 可以计算与发行日处于一月中同一天的到期日的日期。

EDATE(start_date,months)

EOMONTH

返回 start-date 之前或之后指定月份中最后一天的系列数。用函数 EOMONTH 可计算特定月份中最后一天的时间系列数,用于证券的到期日等计算。

EOMONTH(start_date,months)

HOUR

返回时间值的小时数。即一个介于 0 (12:00 A.M.) 23 (11:00 P.M.) 之间的整数。

HOUR(serial_number)

MINUTE

返回时间值中的分钟。即一个介于 0 59 之间的整数。

MINUTE(serial_number)

MONTH

返回以系列数表示的日期中的月份。月份是介于 1(一月)和 12(十二月)之间的整数。

MONTH(serial_number)

NETWORKDAYS

返回参数 start-data end-data 之间完整的工作日数值。工作日不包括周末和专门指定的假期

NETWORKDAYS(start_date,end_date,holidays)

NOW

返回当前日期和时间所对应的系列数。

NOW( )

SECOND

返回时间值的秒数。返回的秒数为 0 59 之间的整数。

SECOND(serial_number)

TIME

返回某一特定时间的小数值,函数 TIME 返回的小数值为从 0 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 A.M) 23:59:59 (11:59:59 P.M) 之间的时间。

TIME(hour,minute,second)

TIMEVALUE

返回由文本串所代表的时间的小数值。该小数值为从 0 0.999999999 的数值,代表从 0:00:00 (12:00:00 AM) 23:59:59 (11:59:59 PM) 之间的时间。

TIMEVALUE(time_text)

TODAY

返回当前日期的系列数,系列数是 Microsoft Excel 用于日期和时间计算的日期-时间代码。

TODAY( )

WEEKDAY

返回某日期为星期几。默认情况下,其值为 1(星期天)到 7(星期六)之间的整数。

WEEKDAY(serial_number,return_type)

WEEKNUM

返回一个数字,该数字代表一年中的第几周。

WEEKNUM(serial_num,return_type)

WORKDAY

返回某日期(起始日期)之前或之后相隔指定工作日的某一日期的日期值。工作日不包括周末和专门指定的假日。

WORKDAY(start_date,days,holidays)

YEAR

返回某日期的年份。返回值为 1900 9999 之间的整数。

YEAR(serial_number)

YEARFRAC

返回 start_date end_date 之间的天数占全年天数的百分比。

YEARFRAC(start_date,end_date,basis)

  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017