Excel 如何填充特殊格式的值班日期?

图4.217是值班表的格式,要求每人值班一周,因此每个人的值班日期是“1月1日-1月7日”以这种格式按范围来确定的。现在的问题在于这种格式的日期是否可以通过填充方式批量地生成,而不是人工逐个输入?

图4.217 特殊格式的值班表

解题步骤

用“-”将两个日期连起来后,日期就变成了文本,文本是无法通过填充产生递增或递减的序列的,因此可以将它们拆分到两列中,变成两个日期值,对日期填充后再用公式将它们连起来即可,具体操作步骤如下。

1.在 D2 单元格输入“1-1”,在 E2 单元格输入“1-7”,然后在 F2 单元格输入公式“=TEXT(D2,"m月d日")㊣"-"㊣TEXT(E2,"m月d日")”,公式的含义是D2和E2的值都转换成“m月d日”的格式,然后将它们与“-”连起来,最终效果如图4.218所示。

图4.218 在辅助区创建第一个值班日期

2.选择D2:E2区域,然后用右键按住填充柄向下填充到第15行,松开右键后,从右键菜单中选择“序列”,弹出“序列”对话框,并在其中将步长值修改为 7,操作界面如图 4.219 所示。

图4.219 设置填充的步长值

3.单击“确定”按钮执行填充。

4.选择F2单元格,然后用左键双击填充柄,从而使F2的值向下填充到F15,如图4.220所示。

图4.220 填充后的辅助区

5.复制F2:F15区域的值,然后右键单击A2单元格,从右键菜单的粘贴选项中选择“值”,从而将F2:F15区域的值粘贴到A列对应的区域。

6.删除A:F区域的值。

知识扩展

1.工作中有很多需求都不可能一步到位,适当地变通一下,通过辅助区域或辅助软件完成也是可以接受的,领导通常只要求完成什么工作,而不会强制要求用什么方法完成。

2.F列的值是公式产生的,直接复制到A列只能得到错误值,要么将F列的公式转换成值再复制,要么使用“选择性粘贴”→“值”的方式复制到A列。

Excel 如何快速输入当前日期和时间?

在单元格中输入当前日期和时间,有什么快捷的方法来实现?

解题步骤

快捷产生日期和时间有两种方法:其一是通过函数产生当前时间,该时间会自动刷新,任何时候打开工作簿都能看到当前的准确日期和时间。但是当要求日期和时间不变化时就不宜使用函数了,此时应使用方法二——通过快捷键产生日期和时间。

快速输入当前日期和时间的操作步骤如下。

1.假设要在A1单元格生成自动更新的日期,那么在A1单元格中输入以下公式:

=Today()

公式的含义是生成当前日期,效果如图4.205所示。每天打开此工作簿时A1单元格的值都会更新,永远显示当前日期。

图4.205 可自动更新的日期

2.假设要显示自动更新的时间,那么可以在A2单元格输入以下公式:

=TEXT(NOW(),"hh:mm:ss")

输入公式并按下Enter键时,A2单元格会显示按下Enter键那一瞬间的时间,而按下F9键刷新公式时则会马上更新为按F9键的时间,如图4.206所示。

图4.206 可自动更新的时间

有些情况下要求单元格只能显示当前日期或时间,不允许自动更新,那么应按以下方法操作。1.选择D1单元格,然后按组合键<Ctrl+;>生成当前日期,效果如图4.207所示。

图4.207 通过快捷键产生当前日期

2.如果还想在此单元格中产生当前时间,那么先按下空格,然后再按组合键<Ctrl+Shift+;>,此时在日期后方会追加当前的时间,效果如图4.208所示。

图4.208 通过快捷键产生当前时间

上述两步生成的值是永远不更新的,只是记录按下组合键的时间。如果要更新,选择单元格后再次按下两个组合键即可。

知识扩展

1.函数TODAY没有参数,它用于产生今天的日期,不带时间值。此函数在4种情况下会自动更新结果,其一是编辑单元格并按下Enter键时,第二是按F9键时,其三是保存工作簿时,其四是打开工作簿时。

NOW函数也没有参数,它用于产生当前日期和时间,同时包含日期和时间值,但是在单元格中输入公式“=NOW()”时并不会将年、月、日和时、分、秒都显示出来,因此需要在外面套一个TEXT函数,让它强制显示当前的年、月、日和时、分、秒。

2.严格来说,公式记录的是控制面板设置的时间,假设控制面板里面的时间设置有误,那么公式生成的时间也会错误。

Excel 如何快捷输入按月递增的日期?

公司为了提升员工福利,规定进公司后每两个月可以申请一天有薪假。例如8月5日入职,那么10月5日时就允许申请,直到12月5日时又申请下一轮休假。

在图4.185中有每个职工的入厂日期,要求写出所有职工的近10次休假申请日期,是否有办法快捷生成日期,而不用手工逐个填入?

图4.185 休假申请表

解题步骤

按月递增的日期不仅是在基准日期上添加月份,还要考虑每月天数的问题,例如 12 月 31日入职,首休申请日不是2月31日,因为2月没有31日,只有28天或29天。

人工判断日期比较困难,使用内置的填充工具可以瞬间完成,具体步骤如下。

1.选择B2:B9区域,将鼠标指针指向B9单元格的右下角,当鼠标指针变成黑色十字光标时按下右键向右方拖动,直到L列时再松开。

2.从弹出的右键菜单中选择“序列”,弹出“序列”对话框。

3.在对话框中将“日期单位”设置为“月”,将步长值设置为2,表示隔两个月生成日期。设置界面如图4.186所示,而填充结果如图4.187所示。

图4.186 设置填充选项

图4.187 填充结果

图4.187中,D5单元格是9月30日,而它左方的单元格是7月31日,这是Excel自动判断的结果,由于9月不存在31日,因此降为9月30日。

知识扩展

1.按下左键,然后向任意方向拖动填充柄即可实现数据填充,不过要实现复杂的填充只能通过右键打开“序列”对话框,然后按需求设置填充选项。

拖动左键填充日期时,步长值总是1,日期单位为“日”,采用右键填充则可以随意指定步长值及日期单位。

2.如果没有选择“Excel选项”对话框中的“启用填充柄和单元格拖放功能”复选框,那么单元格就不支持填充柄。当无法填充单元格时应及时进入“Excel选项”对话框中查看。

Excel 如何快捷输入递进为5的日期值?

假设今天是2015年9月1日,要求对图4.178所示表格中的5个职员安排9月值日表,每人值日一天后轮到下一人,自动跳过周末。有什么办法快捷完成而非手工写入日期呢?

图4.178 空白值日表

解题步骤

Excel的填充工具可以智能判断工作日,还可以设置递进数值,借助填充工具可以用几秒钟完成以上工作,具体操作步骤如下。

1.在B2单元格输入初始日期9-1。

2.将鼠标指针移到 B2 单元格的右下角,当产生图 4.179 所示的黑色十字光标时按下右键拖动,当拖到F5时再松开鼠标,此时会弹出图4.180所示的右键菜单,单击“序列”菜单,弹出“序列”对话框。

图4.179 填充柄

图4.180 调用“序列”对话框

3.在“序列”对话框中将日期单位设置为“工作日”,步长值则采用默认值1,然后单击“确定”按钮执行填充操作。图4.181为设置填充方式的界面,而图4.182则是填充效果。

图4.181 设置填充选项

图4.182 填充效果

在图4.182中F2单元格的值是7日而不是5日,因为9月5日和6日属于周末,在“序列”对话框中指定的是“工作日”,那么填充时一定会忽略所有周末和法定假日。

4.将光标移到 F2 单元格的右下角,按下右键不松开,然后将填充柄向下拖动,直到第 7行时松开鼠标,最后在弹出的右键菜单中选择“序列”菜单,弹出“序列”对话框。

5.在对话框中选中单选按钮“列”,然后将日期单位设置为“工作日”,将步长值设置为5,将终止值设置为“9月30日”,表示填充时按5递增,跳过周末和假日,填充到9月30日时结束。图4.183是设置界面,而图4.184是填充结果。

图4.183 设置填充选项

图4.184 填充结果

知识扩展

1.工作日是指周末和法定假日以外的需要上班的日期,人工判断效率太低,Excel在填充时可以自动判断工作日,从而使输入日期的工作效率提高数倍。

2.本例中横向填充时以1为级差向上递增,因此在“序列”对话框中将步长值保持默认值1即可,纵向填充时,由于有5人值班,因此需要递增5,步长值必须修改为5。

3.终止值表示填充时的上限,如果不指定就可能产生属于10月份的日期,显然不符合需求,因此将9月最后一天作为终止值。

Excel 如何将一列日期分别存放到三列中

图 4.50 所示的职工信息中,出生年月日合并为一个字符串存放在单个单元格里,是否可以一次性将所有日期分别提取年、月、日,然后保存在右方的3个单元格中?

图4.50 职工信息表

解题步骤

由于 C 列的出生日期统一长度为 8 位,有明显的规律,因此可以利用分列工具完成,具体操作步骤如下。

1.选择C2:C11区域。

2.单击功能区的“数据”→“分列”,弹出“文本分列向导”对话框。

3.选择“固定宽度”,然后单击“下一步”按钮,操作界面如图4.51所示。

图4.51 设置分列方式

4.分别在8位字符的第4位和第6位右方单击,从而添加两条分列线,效果如图4.52所示。

图4.52 添加分列线

5.单击“下一步”按钮,进入“文本分列向导”的第3步,然后选中“文本”单选按钮,表示让分列后的第1列显示为文本格式,操作界面如图4.53所示。

图4.53 设置分列后的单元格格式

此时在下方的“数据预览”框中可以看到第一列的标题显示为文本,第2列和第3列仍然是常规格式,因此还需要继续修改第2列与第3列的格式。

6.单击第2列的标题“常规”,然后单击上方的“文本”单选按钮。

7.单击第3列的标题“常规”,然后单击上方的“文本”单选按钮,最后单击“完成”按钮,分列效果如图4.54所示。

8.将C1:E1单元格的标题修改为年、月和日,然后对A1:E11区域添加边框,表格的最终效果如图4.55所示。

图4.54 分列结果

图4.55 添加边框及修改标题

知识扩展

1.用3个公式也可以分别从8位日期中提取年、月和日,不过难度比分列大,而且速度更慢。

2.本例分列过程中将 3 列都设置为文本格式,其目的是分列后不丢失前置的 0。例如,19890308分列后将得到1989、03和08三段字符,由于Excel的单元格默认是常规格式,无法保存前置的0,因此会显示为1989、3和8三段字符,只有设置为文本格式后才可以保存前置的0。实际工作中是否需要修改格式,由用户自身的需求而定。

3.如果数据是“1977年3月16日”、“1967年12月5日”这种形式,那么无法一次分列完成,宜用公式完成。

请在封面中缝指定的QQ群下载文件和视频教材,从而方便练习,同时验证本案例中的技巧与操作结果。

Excel 是否能只允许输入2000年到2015年之间的升序日期

疑难场景

公司成立于2000年,因此制表时所用到的时间都大于等于2000年、小于等于2015年。同时,由于报表中涉及时间时一律要求升序排列,如果下方单元格的时间小于上方单元格的时间则表示输入有误。此外,禁止日期区域的两个日期之间有空白单元格,即所有日期都需要填写完整,不能跳过一个日期。应该如何设置才能让单元格符合以上3个条件呢?

解题步骤

设置数据验证可以让指定区域只能输入2010年到2015年的升序日期,具体步骤如下。

1.选择需要进行限制的区域A2:A20。

2.单击功能区的“数据”→“数据验证”,弹出“数据验证”对话框。

3.将“允许”下拉列表中的“任何值”修改为“自定义”,然后在“公式”文本框中输入以下公式:

公式表示A2的值必须大于等于2010年1月1日、小于2015年12月31日、大于等于A1单元格的数值(如果A1是文本则当作0计算)、A1单元格不能等于空值。

公式中的A2和A1采用的是相对引用,因此公式在不同单元格中时,公式中的A2和A1将代表不同的单元格。对于A2单元格的数据验证,采用的是公式

而A4单元格会将A2变成A4、将A1变成A3,其数据验证公式为

简言之,公式中的A2和A1并非代表A2单元格和A1单元格,而是当前单元格与上一个单元格,公式在不同单元格中A2和A1将代表不同的对象。

4.打开“数据验证”对话框的“出错警告”选项卡,“样式”保持“停止”不变,将“标题”设置为“友情提示”,将“错误信息”设置为“1.只能是2010年到2015年之间的日期2.必须是升序的日期3.上方不能有空白单元格”。图3.18和图3.19分别是设置公式与设置出错警告信息。

由于公式较长,在图 3.18 中未完整显示公式,请读者直接使用案例文件,在文件中有完整的公式。

使用公式限制单元格

图3.18 使用公式限制单元格

图3.19 指定警告信息

5.在“数据验证”对话框中单击“确定”按钮返回工作表界面。

6.在A2单元格输入日期2008-9-1,单击Enter键后Excel将弹出如图3.20所示的警告信息,同时禁止用户输入。

7.单击“重试”按钮,重新输入日期“2010-10-5”,由于此日期符合所有要求,因此Excel允许正常输入。

8.在A3单元格录入日期“2010-2-8”,由于当前日期不符合“大于等于上方单元格的日期”这个条件,因此Excel会弹出如图3.21所示的提示信息,同时禁止用户输入。

图3.20 日期小于2010年

图3.21 非升序日期

9.单击“重试”按钮,然后重新输入日期“2012-12-8”,此日期可以正常输入。

10.选择 A5 单元格,然后输入日期“2015-8-9”,尽管此日期在指定的范围之内,且大于前面的所有日期,但是不符合“上方单元格不能空白”的条件,因此Excel会禁止输入,同时弹出如图3.22所示的警告信息对话框。

图3.22 上方单元格空白

通过测试可以确定本例的数据验证设置满足所有需求。

知识扩展

1.DATE(2010,1,1)代表2010年1月1日,不能使用“"2010-1-1"”或“"2010年1月1日"”来代表2010年1月1日,因为它们都是文本,而DATE(2010,1,1)才是真正的日期值。

2.DATE(2015,12,31)代表2015年的最后一天,同理不能使用“"2015-12-31"”或“"2015年12月31日"”。

3.N函数可以将文本转换成0,数值保持不变,例如:

=N("Excel")——运算结果为0

=N(2015)——运算结果为2015

在本例中,由于上方的一个单元格有可能是日期值也有可能是文本,使用N函数将A1转换成数值后再与A2进行比较,否则A2单元格不管输入什么日期都会禁止输入,因为任意日期值都小于文本值。

4.Excel对数据的大小排序是:

逻辑值>文本>字母>数值

其中逻辑值包含 True 和 False,文本包含汉字、标点符号、片假名等,字母即 A~Z 和 a~z各26个英文字母。数值包含正数、负数、0,日期也是数值,仅仅显示形态不同于数值,但其本质仍是数值。

根据以上排序可以得知,任意文本都是大于数值和日期的,因此当 A1 是文本、A2 是日期时,A1总是大于A2。

5.And函数用于校验多个条件是否全部成立,本例中使用了3个条件,即And函数的3个参数。And函数支持1~255个参数。

6.设置数据验证时,不管当前选中了多大的区域,公式中只写左上角一个单元格,Excel会自动将这个公式应用到所有单元格中,而且公式会随单元格地址变化而变化,自动适应,不过前提是公式中的单元格采用相对引用。

7.通过数据验证对单元格的值进行限制时,如果是简单的限制,使用“允许”下拉列表的各种现成设置足以应付,像本例这种复杂的多条件限制则必须通过公式来限制。

8.多条件限制时只能通过公式一次性指定多个条件,不能分多次设置数据验证,像条件格式那样多个条件并存,因此本例中不同的错误类型只能共用一条警告信息。

请在封面中缝指定的QQ群下载文件和视频教材,从而方便练习,同时验证本案例中的技巧与操作结果。

Excel 如何禁止输入不规范的日期

工作中会经常收到同事发来的包含不规范日期值的报表,从而导致后期运算出错。例如“2015.7.15”、“2015年7月15号”、“07.15.2015”、“20150715”等格式都属于不规范的日期值,无法使用日期函数对它们执行运算。是否可以在前期设计表格模板时禁止用户输入不规范的日期?

解题步骤

假设有图3.6所示的销量报表模板,要求对A2:A9区域加以限制,从而提升日期值的准确性,操作步骤如下。

图3.6 销量报表模板

1.选择A2:A9区域。

2.单击功能区的“数据”→“数据验证”,弹出“数据验证”对话框。

3.将对话框中“允许”下拉列表中的“任何值”修改为“日期”,表示只允许在 A2:A9 区域输入日期。

4.根据实际工作需求对“开始日期”和“结束日期”指定范围。例如,当前工作表只允许输入2015年和2016年的日期,那么就分别输入“2015-1-1”和“2016-12-31”。设置结果如图3.7所示。

5.打开“数据验证”对话框的“出错警告”选项卡,“样式”保持“停止”不变,将“标题”设置为“友情提示”,将“错误信息”设置为“请按标准的日期格式输入,有效范围在2015-1-1到2016-12-31之间”,设置结果如图3.8所示。

指定日期范围

图3.7 指定日期范围

设置出错警告

图3.8 设置出错警告

6.单击“数据验证”对话框中的“确定”按钮返回工作表界面,在 A2 单元格输入不规范的日期“2015.2.28”,当单击Enter键后将弹出图3.9所示的错误提示信息。

图3.9 输入格式不规范的日期时产生错误提示

7.单击“重试”按钮,继续输入日期“2014-5-7”,Excel会产生相同的提示信息,表示格式有误、范围有误时都禁止操作。

知识扩展

1.“2015.7.15”、“2015年7月15号”、“07.15.2015”、“20150715”等都不是规范的日期,所有日期函数都无法对它们执行日期运算。

例如,Month函数可以计算一个日期属于几月份,图3.10和图3.11两个图片分别展示了错误格式的日期和正确格式的日期的运算结果。

图3.10 错误的日期执行日期运算时出错

图3.11 正常计算出月份

2.正确的长日期有三种格式(排除英文格式),包含“2015-7-15”、“2015/7/15”和“2015年7月15日”。当在单元格中输入最后一种格式的日期时,Excel会自动将它转换成“2015/7/15”格式的日期。

3.日期其实就是数值,只是它呈现出的形态与数值不同而已,本质上是一样的。例如2015年8月8日等同于数值42224,只是显示为日期样式而已。因此日期必须是数值,不管其外观如何变化。假设按文本形式输入日期则无法参与数值运算,对工作带来负面影响。“2015.8.8”就是文本形式,所有日期函数都无法对该值执行日期运算。

4.为什么42224代表2015年8月8日呢?Excel以1900年1月1日作为初始日期,日期1900年1月1日被当作第一天,那么相对于1900年1月0日之后的第42224天则刚好是2015年8月8日。可以如此验证:在A1单元格录入数值42224,然后依次单击功能区的“开始”→“数字格式”→“长日期”,单元格中的42224马上会显示为2015年8月8日,效果如图3.12所示。

通过设置格式改变数值的显示形态

图3.12 通过设置格式改变数值的显示形态

Excel 计算两个日期之间的天数:DAYS360函数详解

DAYS360函数用于按照一年365天进行计算,用于返回两个日期之间相差的天数。其语法是:


DAYS360(start_date,end_date,method)

其中,start_date参数为计算日期的起始时间;end_date参数为计算日期的终止时间;method参数为用于计算方法的逻辑值,FALSE或忽略表示使用美国方法,TRUE则使用欧洲方法。

某公司财务人员需要计算每种固定资产使用的具体天数,由于数据庞大,使用人工计算比较复杂,下面将利用DAYS360函数,分别使用美国与欧洲方法计算每种固定资产使用天数。具体操作步骤如下。

STEP01:新建一个空白工作簿,重命名为“DAYS360函数”,切换至“Sheet1”工作表,输入本例的原始数据,如图13-18所示。

图13-18 原始数据

STEP02:选中E2单元格,在编辑栏中输入“=DAYS360(C2,D2)”,然后按“Enter”键即可返回美国方法计算的两日期之间的天数,如图13-19所示。

STEP03:选中E2单元格,利用填充柄工具向下复制公式至E7单元格,通过自动填充功能即可返回所有美国方法计算的两日期之间的天数,如图13-20所示。

STEP04:选中F2单元格,在编辑栏中输入公式“=DAYS360(C2,D2,TRUE)”,然后按“Enter”键即可返回欧洲方法计算的两日期之间的天数,如图13-21所示。

图13-19 返回美国方法计算两日期之间的天数

返回所有美国方法计算两日期之间的天数

图13-20 返回所有美国方法计算两日期之间的天数

STEP05:选中F2单元格,利用填充柄工具向下复制公式至F7单元格,通过自动填充功能即可返回所有欧洲方法计算的两日期之间的天数,如图13-22所示。

返回欧洲方法计算的两日期之间的天数

图13-21 返回欧洲方法计算的两日期之间的天数

返回欧洲方法计算的所有两日期之间的天数

图13-22 返回欧洲方法计算的所有两日期之间的天数

Excel 将一串数字转换成标准日期:DATE函数

如图13-15所示,为了实现快速输入,在输入日期数据的时候,都采用了类似20190522、20190220、20190325、20190528的形式。在完成数据输入后,需要将其转换为标准的日期格式,利用前面介绍的DATE函数,可以方便地实现该功能。具体操作步骤如下。

图13-15 原始数据

STEP01:打开“转换标准日期.xlsx”工作簿,切换至“Sheet1”工作表,原始数据如图13-15所示。

STEP02:选中B2单元格,在公式编辑栏中输入公式“=DATE(MID(A2,1,4),MID(A2,5,2),MID(A2,7,2))”,按“Enter”键即可将非日期数据转换为标准的日期,如图13-16所示。

STEP03:选中B2单元格,利用填充柄工具向下复制公式至B5单元格,通过自动填充功能将其他单元格中的非日期数据转换为标准的日期,结果如图13-17所示。

转换日期

图13-16 转换日期

转换为标准日期结果

图13-17 转换为标准日期结果

Excel 将数值转换为日期格式:DATE函数详解

DATE函数是用于返回代表特定日期的序列号,其语法如下:


DATE(year,month,day)

其中year参数是1~4位数字,Excel会根据当前所使用的日期系统来解释year参数。month参数代表一年中从1月到12月(一月到十二月)各月的正整数或负整数。day参数代表一个月中从1日到31日的正整数或负整数。利用该函数可以将数值转换为日期格式。下面通过实例来具体讲解该函数的操作技巧。

STEP01:新建一个空白工作簿,重命名为“DATE函数”。切换至“Sheet1”工作表,输入本例的原始数据,如图13-12所示。

图13-12 原始数据

STEP02:选中D2单元格,在公式编辑栏中输入公式“=DATE(A2,B2,C2)”,按“Enter”键即可将指定单元格中的数据转换为日期格式,如图13-13所示。

STEP03:选中D2单元格,利用填充柄工具向下复制公式至D4单元格,通过自动填充功能即可返回其他单元格所对应的日期,如图13-14所示。

图13-13 返回对应日期

返回其他单元格对应日期

图13-14 返回其他单元格对应日期