Table of contents
如果你是这个博客的常客,你可能已经注意到了一些涉及Excel条件格式化不同方面的文章。 现在我们将利用这些知识,创建电子表格,以区分工作日和周末,突出公共假期,并显示即将到来的最后期限或延迟。 换句话说,我们将把Excel条件格式化应用于日期。
如果你有一些Excel公式的基础知识,那么你很可能熟悉一些日期和时间函数,如NOW、TODAY、DATE、WEEKDAY等。在本教程中,我们将进一步发挥这一功能,以 有条件地格式化Excel日期 以你想要的方式。
Excel日期的条件格式化(内置规则)
Microsoft Excel提供了10个选项,可以根据当前日期对选定的单元格进行格式化。
- 要应用格式化,你只需到 首页 标签> 条件性格式化> 突出显示单元格规则 并选择 一个发生的日期 .
- 选择其中一个 日期选项 从窗口左侧的下拉列表中选择,范围从上个月到下个月。
- 最后,选择一个预定义的格式或通过选择不同的选项来设置你的自定义格式。 字体 , 边境 和 填充 如果Excel标准调色板不够用,你可以随时点击 更多颜色... 按钮。
- 点击 认可 并享受其结果! :)
然而,这种快速而直接的方法有两个显著的局限性--1)它只适用于选定的单元格;2)条件格式总是基于当前日期来应用。
Excel日期的条件格式化公式
如果你想突出显示单元格或整个行 基于另一个单元格中的一个日期 ,或创建规则用于 更大的时间间隔 (下面是我最喜欢的Excel日期条件格式的几个例子。
如何在Excel中突出显示周末
遗憾的是,Microsoft Excel没有类似于Outlook的内置日历。好吧,让我们看看如何用相当少的精力来创建自己的自动日历。
当设计你的Excel日历时,你可以使用=DATE(year,month,date)函数来显示一周的天数。 只需在电子表格的某个地方输入年份和月份的数字,并在公式中引用这些单元格。 当然,你可以直接在公式中输入数字,但这并不是一个非常有效的方法,因为你必须为每个月调整公式。
下面的截图展示了DATE函数的运行情况。 我使用了公式 =date($b$2,$b$1,b$4)
被复制到第5行。
提示:如果你想像上图那样只显示一周的日子,选择有公式的单元格(本例中为第5行),右击并选择 格式化单元格.> 数字> 自定义 从以下的下拉列表中 类型 ,选择其中之一 dddd 或 ddd 来分别显示全天的名字或缩写的名字。
你的Excel日历就快完成了,你只需要改变周末的颜色。 当然,你不打算手动给单元格着色。 我们将让Excel自动格式化周末,通过创建一个基于条件格式化规则的 周日 公式。
- 你首先在Excel日历中选择你要遮盖的周末。 在我们的例子中,它是$B$4:$AE$10的范围。 请确保在选择时以 第1个日期栏 - 本例中的B栏。
- 关于 首页 标签,点击 条件性格式化菜单> 新规则 .
- 根据上述链接指南中解释的公式,创建一个新的条件格式化规则。
- 在" 格式化该公式为真的值" 框,输入以下WEEKDAY公式,确定哪些单元格是周六和周日。
=WEEKDAY(B$5,2)>5
- 点击 格式... 按钮,并通过在以下选项中切换来设置你的自定义格式。 字体 , 边境 和 填充 当完成后,点击 认可 按钮来预览该规则。
现在,让我简单地解释一下 WEEKDAY(serial_number,[return_type])
公式,这样你就可以为你自己的电子表格快速调整它。
- ǞǞǞ
序列号
参数代表你要找的日期。 你输入第一个有日期的单元格的引用,在我们的例子中是B$5。 - ǞǞǞ
[返回_类型]
参数决定了一周的类型(方括号暗示它是可选的)。 你输入2作为从周一(1)到周日(7)的一周的返回类型。 你可以在这里找到可用的返回类型的完整列表。 - 最后,你写>5,只强调周六(6)和周日(7)。
下面的截图展示了Excel 2013中的结果--周末被突出显示为红色。
提示。
- 如果你的公司有非标准的周末,例如周五和周六,那么你需要调整公式,使其从周日(1)开始计算,并突出第6天(周五)和第7天(周六)--。
WEEKDAY(B$5,1)>5
. - 如果你正在创建一个水平(横向)日历,在单元格引用中使用相对列(没有$)和绝对行(有$),因为你应该锁定行的引用--在上面的例子中是第5行,所以我们输入B$5。 但如果你正在设计一个垂直方向的日历,你应该做相反的事情,即使用绝对列和相对行,例如$B5,你可以看到在下面的屏幕截图。
如何在Excel中突出显示假日
为了进一步改善你的Excel日历,你也可以对公共假日进行遮蔽。 要做到这一点,你需要在同一个或其他一些电子表格中列出你想强调的假日。
例如,我在A栏添加了以下假期($A$14:$A$17)。 当然,并不是所有的假期都是真正的公共假期,但它们可以作为示范用途 :)
再次,你打开 条件性格式化 > 新规则 在节假日的情况下,你将使用以下两种方法之一 匹配 或 COUNTIF 功能。
=COUNTIF($A$14:$A$17,B$5)>0
=match(b$5,$a$14:$a$17,0)
注意:如果你为假日选择了不同的颜色,你需要通过以下方式将公共假日规则移到规则列表的顶部 条件性格式化> 管理规则...
下图是Excel 2013中的结果。
当一个值被改变为一个日期时,有条件地格式化一个单元格
当一个日期被添加到一个单元格或同一行中的任何其他单元格时,只要不允许有其他的值类型,那么有条件地对该单元格进行格式化并不是什么大问题。 在这种情况下,你可以简单地使用一个公式来突出非空白,如Excel中关于空白和非空白的条件公式中所述。 但如果这些单元格已经有一些值,例如文本,而你想改变当文字被改为日期时,背景颜色是什么?
这项任务可能听起来有点复杂,但解决方案非常简单。
- 首先,你需要确定你的日期的格式代码。 下面是几个例子。
- D1: dd-mmm-yy 或 d-mmm-yy
- D2: dd-mmm 或 d-mmm
- D3: mmm-yy
- D4:mm/dd/yy或m/d/yy或m/d/yy h:mm
你可以在这篇文章中找到日期代码的完整列表。
- 选择一个你想改变单元格颜色的列,或者在你想突出显示行的情况下选择整个表格。
- 现在使用与此类似的公式创建一个条件格式化规则。
=CELL("format",$A2)="D1"
在该公式中,A是有日期的列,D1是日期格式。如果你的表包含2种或更多格式的日期,那么使用OR运算符,例如
=OR(cell("format", $A2)="D1", cell("format",$A2)="D2", cell("format", $A2)="D3")
下面的截图展示了这种日期条件格式化规则的结果。
See_also: Excel:比较两列的匹配和差异
如何根据某一列中的某一日期来突出显示行
假设,你有一个大型的Excel电子表格,其中包含两列日期(B和C)。 你想突出显示C列中有某个日期的每一行,例如13-May-14,。
要对某一日期应用Excel条件格式化,你需要找到它的 数值 首先,你可能知道,Microsoft Excel将日期存储为连续的序列号,从1900年1月1日开始。 因此,1900年1月1日被存储为1,1900年1月2日被存储为2...而14年5月13日被存储为41772。
要找到日期的编号,右键单击单元格,选择 格式化单元格> 数字 并选择 一般 格式。 写下你看到的数字,然后点击 取消 因为你并不是真的想改变日期的格式。
这实际上是工作的主要部分,现在你只需要用这个非常简单的公式为整个表格创建一个条件格式化规则。 =$C2=41772
该公式意味着你的表格有标题,第2行是有数据的第一行。
另一种方法是使用 价值评估(DATEVALUE 公式,将日期转换为它所存储的数字格式,例如:。 =$C2=DATEVALUE("5/13/2014")
无论你使用哪种配方,都会有同样的效果。
在Excel中根据当前日期有条件地格式化日期
正如你可能知道的那样,Microsoft Excel提供了 今天()
下面是几个例子,说明你如何使用它来有条件地格式化Excel中的日期。
例1.突出显示等于、大于或小于今天的日期
要根据今天的日期有条件地格式化单元格或整个行,你可以使用TODAY函数,如下所示。
与今天相等。 =$B2=TODAY()
比今天更大。 =$B2>TODAY()
比今天少。 =$B2
下面的截图展示了上述规则的作用。 请注意,在撰写本文时,TODAY是2014年6月12日。
例2.在Excel中根据几个条件有条件地格式化日期
以类似的方式,你可以将TODAY函数与其他Excel函数结合使用,以处理更复杂的情况。 例如,你可能希望你的Excel条件格式化日期公式为 发票 栏,当 交付日期 等于或大于今天,但你希望当你输入发票号码时格式化消失。
对于这项任务,你将需要一个额外的列,其公式如下(其中E是你的 交付 栏,F为 发票 列)。
=IF(E2>=TODAY(),IF(F2="", 1, 0), 0)
如果交货日期大于或等于当前日期,并且发票栏中没有数字,公式返回1,否则为0。
之后,你为 发票 栏,公式为 =$G2=1
当然,你以后可以隐藏这一栏。
例3.强调即将到来的日期和延迟
假设你在Excel中有一个项目时间表,其中列出了任务、开始日期和持续时间。 你想要的是自动计算每个任务的结束日期。 另外一个挑战是,该公式还应该考虑周末。 例如,如果开始日期是2014年6月13日,工作天数(持续时间)是2,结束日期应该是2014年6月17日。因为6月14日和15日是星期六和星期日。
要做到这一点,我们将使用 WORKDAY.INTL(start_date,days,[周末],[假日])
功能,更确切地说 =workday.intl(b2,c2,1)
.
在公式中,我们输入1作为第3个参数,因为它表示周六和周日是假期。 如果你的周末不一样,比如说周五和周六,你可以使用另一个值。 周末值的完整列表在这里可以找到。 另外,你还可以使用第4个参数[假期],这是一组日期(单元格范围),应该从工作日日历中排除。
最后,你可能想根据截止日期的远近来突出显示行。 例如,基于以下2个公式的条件格式化规则分别突出显示即将到来和最近的结束日期。
=AND($D2-TODAY()>=0,$D2-TODAY()<=7)
- 突出显示所有结束日期(D列)在以下范围内的行。 未来7天 当涉及到跟踪即将到来的到期日或付款时,这个公式真的很方便。=AND(TODAY()-$D2>=0,TODAY()-$D2<=7)
- 突出显示所有结束日期(D列)在以下范围内的行。 最近7天 你可以使用这个公式来跟踪最新的逾期付款和其他延误。
下面是几个可以应用于上表的公式例子。
=$D2
=$D2>TODAY()
- 突出所有未来的日期(即大于当前日期的日期)。 你可以用它来突出即将发生的事件。
当然,上述公式可以有无限的变化,这取决于你的特定任务。 例如。
=$D2-TODAY()>=6
- 突出显示6天或更长时间内发生的日期。
=$d2=today()-14
- 突出的日期正好发生在2周前。
如何在一个日期范围内突出显示日期
如果你的工作表中有一长串的日期,你可能还想突出显示属于某个日期范围的单元格或行,即突出显示两个给定日期之间的所有日期。
你可以再次使用TODAY()函数来完成这项任务。 你只需要按照下面的例子来构建一个更复杂的公式。
突出过去日期的公式
- 30多天前。
=TODAY()-$A2>30
- 从30天到15天之前,包括。
=AND(TODAY()-$A2>=15, TODAY()-$A2<=30)
- 不到15天前。
=AND(TODAY()-$A2>=1, TODAY()-$A2<15)
当前的日期和任何未来的日期都不着色。
突出未来日期的公式
- 将在30多天后发生。
=$A2-TODAY()>30
- 在30至15天内,包括。
=AND($A2-TODAY()>=15, $A2-TODAY()<=30)
- 在不到15天内。
=AND($A2-TODAY()>=1, $A2-TODAY()<15)
当前的日期和任何过去的日期都不着色。
如何遮蔽间隙和时间间隔
在这最后一个例子中,我们将利用另一个Excel日期函数-- DATEDIF(start_date, end_date, interval)
这个函数根据指定的时间间隔计算两个日期之间的差异。 它与我们在本教程中讨论的所有其他函数不同,它让你忽略月或年,只计算日或月之间的差异,无论你选择什么。
不知道这对你有什么用? 换个角度想一想......假设你有一份你的家人和朋友的生日清单,你想知道离他们的下一个生日还有多少天吗? 此外,离你的结婚纪念日和其他你不想错过的事件到底还有多少天? 很容易!你会知道的。
你需要的公式是这样的(其中A是你的 日期 列)。
=DATEDIF(TODAY(), DATE((YEAR(TODAY())+1), MONTH($A2), DAY($A2)), "yd")
公式末尾的 "yd "区间类型用于忽略年份,只计算天数之差。 关于可用区间类型的完整列表,请看这里。
提示:如果你碰巧忘记或放错了那个复杂的公式,你可以用这个简单的公式代替。 =365-DATEDIF($A2,TODAY(), "yd")
它产生的结果完全相同,只是记得在闰年用366替换365 :)
现在让我们创建一个Excel条件格式化规则,用不同的颜色给不同的间隙着色。 在这种情况下,利用Excel颜色标度比为每个时期创建一个单独的规则更有意义。
下面的截图展示了Excel中的结果--一个从绿色到红色再到黄色的渐变三色标。
"距离下一个生日的日子 "Excel网络应用程序
我们创建了这个Excel网络应用程序,向你展示上述公式的实际应用。 只要在第一栏中输入你的事件,并在第二栏中改变相应的日期,就可以实验一下结果。
注意:要查看嵌入式工作簿,请允许营销cookies。
如果你很想知道如何创建这样的交互式Excel电子表格,请查看这篇文章:如何制作基于网络的Excel电子表格。
希望本文讨论的至少有一种Excel日期条件格式对你有用。 如果你正在为一些不同的任务寻找解决方案,非常欢迎你发表评论。 谢谢你的阅读!