ARTICLE · 1357563
Excel 里最像台历的一张表:星期钉死不动,日期自己对号入座
1 条核心公式|2 个微调钮|3 组条件格式|开篇动图 + 4 张实拍图|给 Excel 爱好者的一个参考例子

开篇动图|只点月份旁边的小箭头:3 月 → 6 月 → 9 月 → 12 月……1 号每次都准确落在它该在的那一列,月末多出来的日子自动隐身
用 Excel 做日历的函数挺普遍,SEQUENCE、EOMONTH、WEEKDAY 一组合,日期就排出来了。但有一种做法格外有意思:像台历一样,星期表头永远固定,日期自己去找对应的列。
这类版式不只是好玩。做统计台账、值班表、点检记录、月度看板的时候,一格日期配一行空白记录区,翻月就能换一整页,比按流水账往下堆直观得多。
今天拆的这份样表叫 2026年日历表.xlsx:一张工作表、两个小箭头、没有 VBA、没有辅助表。文章按 开篇动图 → 看结构 → 拆公式 → 隐身术 → 微调钮 → 复刻步骤 → 台账延伸 → 踩坑 的顺序讲,公式和单元格地址都按原文件写,照着就能做一遍。
结论|整张表真正的公式只有 1 条:=DATE(年,月,1)-WEEKDAY(DATE(年,月,1),2)+1,算出「1 号所在周的周一」;剩下 41 格全是 左格 +1。看见的「01日」是自定义格式,格子里装的仍是真日期;跨月的日子用条件格式刷成白底白字,看起来就消失了。
一、先看效果:点一下箭头,日期全体搬家

图 1|样表实拍:2026 年 3 月。星期从「一」到「日」固定不变,1 号正好落在最右边的「日」列,首行其余六格自动留白
标题下面那两个上下小三角,就是整张表唯一的「开关」:年份钮管 2020~2045,月份钮管 1~12。点一下,标题、星期下的日期、月末空白、粉色日期条,全部同步重排,手不用碰任何一个格子。
动图里从 3 月点到 12 月,最值得盯的是两件事:一是 1 号始终落在正确的星期列(3 月 1 日是周日、6 月 1 日是周一、12 月 1 日是周二);二是 不是本月的日期一格都不会露脸,既不会串到上月底,也不会拖到下月初。
二、一张表、四个区,没有隐藏工作表
F5H5 | ||
D4:J4 | ||
D6:J6 | ||
D7:J18 |
把日历区横着切开看,一排就是一周,两行为一组:
示意|首行前六格其实是 2 月 23~28 日,被条件格式刷成白底白字后看不见;只有 3 月 1 日露出来
三、核心公式:一句话把 1 号钉回正确的列
整张表的起点在 D7,也就是第一周周一那一格:
公式 ① · D7(日历左上角第一格)复制
=DATE($F$5,$H$5,1)-WEEKDAY(DATE($F$5,$H$5,1),2)+1原文件写作 =DATE(F5,H5,1)-WEEKDAY(DATE(F5,H5,1),2)+1,上面给的是加绝对引用的稳妥版,向右向下拖都不会跑偏。
DATE($F$5,$H$5,1) | |
WEEKDAY(…,2) | |
1号 − 序号 + 1 |
代入样表的 2026 年 3 月:3 月 1 日是周日,WEEKDAY(…,2)=7,于是 3/1 − 7 + 1 = 2/23。D7 就是 2 月 23 日(周一),一路 +1 到 J7 刚好是 3 月 1 日(周日)——和图 1 里右上角孤零零的「01日」完全对上。
原理|为什么是 42 格?一个月最多横跨 6 周(1 号落在周日、当月又有 31 天时),6 行 × 7 列 = 42 个连续日期,从「1 号所在周的周一」开始排,无论哪年哪月都装得下。不需要判断大小月、闰年,DATE 自己会算。
剩下 41 格没有第二条「聪明公式」,全是老老实实加一天:
公式 ② · 向右 +1,换行接上一周复制
E7 =D7+1 → 右拉到 J7 D9 =J7+1 → E9 =D9+1,右拉到 J9 D11 =J9+1 → 依此类推 D13 =J11+1 D15 =J13+1 D17 =J15+1四、看着是「01日」,其实还是能算的日期
这一层是很多人复刻完却没意识到的关键:所有「日」字都是自定义数字格式变出来的,不是文本拼接。格子里的值仍然是 46076、46077 这样的日期序列号。
F5 | General"年" | |
H5 | General"月" | |
D7:J17 | dd"日" |

图 2|把 3 月首行放大:只有右上角的「01日」露出来,左边六格其实是 2 月 23~28 日;「日」字是 dd"日" 加的,值仍然是日期
公式 ③ · 标题(D4,已合并 D4:J4)复制
=$F$5&"年"&"日历表"划重点|千万别用 ="01"&"日" 之类的文本拼日历。一旦格子变成文本,后面想按日期做 SUMIFS、COUNTIFS、TODAY() 比对就全废了。改显示、不改值,是这类表格能拿去做台账的前提。
五、跨月的日子怎么「消失」:3 组逐格判断
42 格里总有一部分是上月末或下月初。样表没有用 IF 把公式改复杂,而是让它们照常算,再用条件格式刷成白底白字——看起来是空格,值还在,方便继续参与计算。
公式 ④ · 条件格式(3 组,公式规则)复制
应用于 D7:J8 → =MONTH(D$7)<>$H$5 应用于 D15:J16 → =MONTH(D$15)<>$H$5 应用于 D17:J18 → =MONTH(D$17)<>$H$5 格式 → 字体:白色;填充:白色(实心)注意公式里的 D$7:列相对、行绝对。往右一格会自动变成 E$7、F$7……于是「这一列顶上的日期属不属于所选月份」成了逐格判断,同一行里有的留、有的隐,正是首尾两周需要的效果;往下覆盖到偶数行,连空白记录行也一起刷白。
D7:J8 | |
D15:J16 | |
D17:J18 | |
D9:J14 | 不用写 |

图 3|切到 6 月:1 号正好是周一,日期从左上角顺着排到 30 日,第 6 周整行留白,没有半格串到 7 月

图 4|切到 12 月:1 号落在「二」列,首行左侧两格空着,31 日收在「四」列,后面同样干干净净
原文件在最末两周还多挂了两条整行判断(=MONTH($D$17)<>$H$5,分别作用于 D17:J17 和 D18:J18,只改边框不改颜色),用来处理第六周整周跨月时的收尾观感。属于锦上添花,先把上面 3 组做对,效果就已经齐了。
结论|「隐藏」而不是「不算」,是这张表最讲究的地方:公式层只管生成 42 个连续日期,显示层只管挑出本月那几天。两层互不干扰,所以翻月时不用改任何公式,也不会把日期算错。
六、两个小箭头:数值调节钮(表单控件)
Excel:开发工具 → 插入 → 表单控件 → 数值调节钮(WPS 里也叫微调按钮 / 微调项)。画两个按钮,右键「设置控件格式 → 控制」:
$F$5 | $H$5 |
踩坑提醒|① 选表单控件,不要选 ActiveX 控件;② 链接单元格必须是能存数值的普通单元格,合并单元格、文本格式都不行;③ 按钮只是把数值写进 F5 / H5,真正驱动日历的是公式,所以手动往 F5 敲个年份也一样能翻页;④ 网页版 Excel 与手机端通常不响应表单控件,桌面版最稳。
七、照着做一遍:8 步复刻
- 摆输入
:F5 填 2026、H5 填 3,分别设自定义格式 General"年"、General"月";G5 手打「年」旁边的文字排版按需调整。 - 插控件
:按第六节的参数做两个数值调节钮,先点几下确认 F5 / H5 会跟着变。 - 做标题
:合并 D4:J4,输入 =$F$5&"年"&"日历表",字号调大、居中,行高约 46。 - 钉表头
:D6:J6 填「一~日」,灰底白字加边框,居中,行高 25。 - 写起点
:D7 输入公式 ①,E7 写 =D7+1右拉到 J7。 - 铺满 6 周
:D9 写 =J7+1、E9 写=D9+1右拉;下面四行照公式 ② 依次接龙(行号 11、13、15、17)。 - 做版式
:所有日期行设 dd"日"+ 浅粉填充;偶数行留空、行高 36;D7:J18 统一加细边框。标题、表头、日期、记录区一次对齐。 - 加隐身
:按公式 ④ 建 3 组条件格式(字体白 + 填充白),应用区域与公式一一对应,最后点微调钮从 1 月翻到 12 月逐月验一遍。
八、拿去做台账:空白行才是主角
如果只想要一张好看的日历,做到第七步就够了。但这份样表特意把每个日期下面留了一整行空白,明显是给记录用的:值班人、点检结果、当日产量、异常情况,都可以按周成块填写,翻月等于翻页。
因为日期格是真日期,明细表里的流水数据可以直接按格汇总。比如在旁边做一个月度汇总区:
公式 ⑤ · 台账延伸(示例,可直接改字段)复制
按某格日期汇总数量 =SUMIFS(明细[数量],明细[日期],D$7) 统计当日异常条数 =COUNTIFS(明细[日期],D$7,明细[状态],"异常") 条件格式·高亮今天 =D$7=TODAY() 条件格式·标出周末 =WEEKDAY(D$7,2)>5- 月度看板
:右侧放一块汇总区,用 SUMIFS按本月首末日圈范围,翻月自动换数。 - 节假日 / 排班
:加一张节日对照表,用 VLOOKUP或条件格式把特殊日期标成另一种底色。 - 打印成册
:把 D4:J18 设为打印区域,12 个月循环打印就是一本台历式记录本。 - 一个提醒
:被刷白的上月 / 下月日期仍然有值,做汇总时记得加 MONTH(日期)=$H$5之类的条件,别把隔壁月份的数算进来。
九、常见坑对照表
WEEKDAY | WEEKDAY(日期,2),周一=1 才对得上中文表头 | |
$D$7 | D$7:列相对、行绝对,逐格判断 | |
dd"日",值保持日期 | ||
IF 判断大小月 | DATE,闰年它自己会算 | |
十、把思路拉直
- 定位靠一个公式
:先找到「1 号所在周的周一」,日历就从固定表头自然长出来了。 - 生成靠连续序列
:42 格一路 +1,不判断月份、不判断闰年,最省心也最不容易错。 - 呈现靠两层分离
:公式管「有什么」,自定义格式和条件格式管「给人看什么」。 - 交互靠一个数值
:微调钮只改年份和月份两个数字,全表靠引用自动重算——这是所有「一钮切换」看板的通用套路。
换个场景照样能用:把「一~日」换成「班次 A / B / C」,就是排班表;把空白记录行换成工序、设备、检查结果,就是月度点检台账。样子是台历,骨子里是一张以日期为主键的二维表。给各位 Excel 爱好者留个参考例子,欢迎照着改出更顺手的版本。















































































