3.3 基本函数
本节介绍在处理日期和时间型数据时经常使用的两个函数,即TEXT函数和DATE函数。
3.3.1 TEXT函数
在Excel中也会遇到将日期数据转换为指定格式的文本数据的情况,TEXT函数可以满足这一需求,它能够将日期数据转换为指定格式的文本型日期数据。
这里的“日期数据”是指看起来像日期的数据,它既可能本来就是日期和时间型数据,也可能属于文本型数据。
在图3-19中,A列是两个不同形式的日期型数据,其中单元格A2以日期格式显示,单元格A3以序列值格式显示(序列值42802对应的是2017年3月8日)。如果想只显示日期中的月份和日期,则可以使用TEXT函数实现。在单元格B2内输入公式“=TEXT(A2, "MM月DD日")”后,拖动其填充柄填充单元格B3,即可得到如图3-19所示的B列显示结果。
图3-19 调整格式
要注意,这里得到的结果是文本型日期数据,如果想得到日期型数据,可以通过设置单元格格式的方式完成。将A列数据复制到C列,将C列在“设置单元格格式”对话框的“数字”选项卡中的“自定义”类别内,设置为自定义格式“mm"月"dd"日"”,如图3-20所示。设置完成后,显示结果如图3-19中C列所示。
图3-20 自定义日期格式1
根据需要,在“自定义”类别内可以进行多种形式的显示形式设置。例如,将A列数据复制到D列,在D列内将自定义格式设置为“"第"m"个月", "第"d"天"”,如图3-21所示。设置完成后,显示结果如图3-19中D列所示。
图3-21 自定义日期格式2
在图3-19中,虽然B列和C列的数据格式看起来是一样的,但它们却有本质上的不同,B列的数据是文本型的,C列的数据是数值型(日期和时间型)的。所以,在进行格式设置时,尽量使用“设置单元格格式”对话框中的“自定义”对日期型数据进行格式设置,以方便后续的处理。
同时需要注意,D列的数据是通过设置单元格格式得到的,所以D列也是其原来的数据类型,即日期和时间型数据。
既然TEXT函数处理后的数据都是文本型的,那么是不是在处理日期数据时就不需要TEXT函数了呢?答案是否定的。例如,有时无法直接将文本型的日期数据转换为日期型的数据,这时就需要先使用TEXT函数对文本型数据进行转换,将其转换为符合标准日期格式的文本型日期数据,再使用公式或设置单元格格式的方式将其转换为日期和时间型数据。
在使用TEXT函数处理日期数据时,其语法格式为“=TEXT(待处理数据,格式)”,其中格式有两种形式:
· YYYY年MM月DD日,将要处理的数据源“待处理数据”作为日期型数据处理。
· 0000年00月00日,将要处理的数据源“待处理数据”作为普通数值处理。
1.YYYY年MM月DD日
如果TEXT函数中指定格式是“YYYY年MM月DD日”的形式,那么在处理时将当前“待处理数据”作为日期型数据处理。
例如,在图3-22所示的B列中,使用的格式就是“YYYY年MM月DD日”,单元格B2中使用的公式为“=TEXT(A2, "YYYY年MM月DD日")”。
图3-22 使用TEXT函数处理日期数据
在单元格B2中,由于格式“YYYY年MM月DD日”的限定,将单元格A2中的值“20171218”作为日期型数据处理。由于数据“20171218”不是日期型数据的格式,所以Excel把它作为时间序列值“20171218”处理,它表示1899年12月31日后的第20171218天,由于这一天超过了Excel的处理范围,所以显示结果为“#VALUE!”。
在单元格B3和B4中,都能够准确地将文本型日期数据转换为正确的日期显示。
在单元格B5中,使用“YYYY年MM月DD日”格式,Excel会尝试将“2017.12.18”作为日期处理,但实际上该数据并不是标准的日期格式,因此并不能得到正确的处理结果,最后仍以其原有形式显示。
2.0000年00月00日
如果TEXT函数中指定格式是“0000年00月00日”的形式,则表示将当前要处理数据中的每一位都依次填写到处理后的日期数据中,格式符号“0”起到占位的作用。所以,这种格式的本质是将“待处理数据”作为数值处理,将它以指定的形式显示。
例如,图3-22中的C列使用的格式就是“0000年00月00日”的形式,单元格C2所使用的公式为“=TEXT(A2, "0000年00月00日")”。
在单元格C2中,根据格式“0000年00月00日”将单元格A2内“20171218”中的6位数字依次填写到指定格式对应的年月日位置上,结果为“2017年12月18日”。
在单元格C3和C4中,根据格式“0000年00月00日”将单元格A3和A4中的数据依次填写到指定格式的年月日位置上。此时,虽然单元格A3和A4中的数据不是数值型数据,但Excel很“聪明”,会想办法将它们转换为数值。Excel发现这些文本型数据符合规范的日期形式,于是自动将它们转换为日期和时间型数据,再将它们转换为各自所对应的序列值“43087”和“43089”,然后将数值依次填写到年月日的位置,在不足的位置上补零。这样处理后,结果就变为“0004年30月87日”和“0004年30月89日”。显然,这样的处理是毫无意义的。
在单元格C5中,根据格式“0000年00月00日”将单元格A5中的数据进行处理。此时,单元格A5中的数据并不是数值型的,也不能转换为数值型,从而导致格式转换失败,仍以原来的样式显示。
3.3.2 DATE函数
DATE函数能够根据给定的年份、月份、日期生成一个日期和时间型数据。DATE函数的语法格式为:
DATE(年,月,日)
在函数中,年、月、日的位置填上要表示的年、月、日,可以生成(返回)对应的日期型数据。例如,使用公式“DATE(2017,12,19)”可生成一个日期型数据“2017-12-19”。
在实际处理中,日期数据的显示可能是多种多样的。特殊格式的日期数据,可以使用DATE函数将其转换为日期型数据。例如,在图3-23中,需要将单元格A2中的数据转换为日期型数据。
图3-23 转换日期
本例中,需要分别从单元格A2中提取年份、月份、日期,然后将其作为DATE函数的参数,从而得到一个日期型数据。
需要使用文本函数将年份、月份、日期从单元格A2中提取出来。具体操作时,可以使用LEFT函数、MID函数、RIGHT函数。
在B列构造辅助列,用来提取单元格A2中的年份。这里使用LEFT函数从单元格A2中提取出年份,公式为“=LEFT(A2,4)”,表示从单元格A2的左侧中提取出4个字符,实现将“2017”提取出来。
在C列构造辅助列,用来提取单元格A2中的月份。这里使用MID函数从单元格A2中提取出月份,公式为“=MID(A2,6,2)”,表示从单元格A2中的第6个字符开始提取出2个字符,实现将“12”提取出来。
在D列构造辅助列,用来提取单元格A2中的日期。这里,使用RIGHT函数从单元格A2中提取出日期,公式为“=RIGHT(A2,2)”,表示从单元格A2中的右侧提取出2个字符,实现将“19”提取出来。
最后,在单元格E2中使用函数DATE生成日期型数据。将上述过程提取出来的年份、月份、日期作为DATE函数的参数,使用公式“=DATE(B2, C2, D2)”构成一个日期型数据。