百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

制作 Excel 日历的两种思路:手动创建和 使用公式动态生成

haoteby 2025-09-05 23:34 4 浏览

制作 Excel 日历主要有两种思路:手动创建(简单灵活)和 使用公式动态生成(自动更新)。下面我将分别介绍两种方法,并提供详细步骤:


1



方法一:手动创建静态日历(适合简单需求或打印)


设置表头:

A1 单元格输入年份(例如:2025)。

A2 单元格输入月份(例如:8)。

B3:G3 单元格区域依次输入星期几的缩写:星期日星期一星期二星期三星期四星期五星期六。(或者 Sun, Mon, Tue, Wed, Thu, Fri, Sat)。


输入日期序列:

确定该月的第一天是星期几(例如 2025 年 8 月 1 日是星期五)。

在对应星期几下方的单元格输入 1(例如星期五在F列,所以在F4单元格输入1)。

F4右侧的G4单元格输入2

F4左侧的E4单元格输入31(代表 7 月 31 日,因为 8 月 1 日前一天是 7 月 31 日,且是星期四)。(如果需要纯当月日历,此处留空或填充背景色区分)

继续向左填写 30 (D4), 29 (C4), 28 (B4), 27 (A4 - 星期日)。

F41开始,向右、向下依次填充日期:

G4 = 2

A5 = 3(下一行星期日)

B5 = 4

... 依此类推,直到填满该月的所有天数(8 月有 31 天)。

8 月 31 日之后的下一个单元格(例如9 月 1 日应该是星期一B9),输入1(如果需要纯当月日历,此处留空或填充背景色区分)


格式化:

日期格式: 选中所有包含日期的单元格(例如A4:G9),按 Ctrl+1 打开“设置单元格格式”对话框。在“数字”选项卡中选择“自定义”,在类型框中输入 d (只显示天数)或 d 日 (显示“X 日”)。点击“确定”。

表头加粗居中: 选中星期表头(B3:G3),设置为加粗并居中。

周末高亮: 选中所有“星期日”所在的列(B 列)和“星期六”所在的列(G 列),设置一个背景色(如浅灰色)。

非本月日期: 选中不属于 8 月的日期(7 月 27-31 日和 9 月 1 日),设置字体颜色为浅灰色或设置不同的背景色。

网格线/边框: 为日期区域添加边框,使其看起来像表格。

调整行高列宽: 调整到合适的大小。


(可选)添加标题:

在顶部合并单元格(例如A1:G1),输入 =A2 & "月 " & A1 & "年日历" 或直接输入 2025 年 8 月日历。

2



方法二:使用公式创建动态日历(推荐,自动更新)

这种方法利用 Excel 的日期函数,只需输入年份和月份,日历会自动生成并更新。


设置年份和月份输入位置:

A1 单元格输入年份(例如:2025)。

A2 单元格输入月份(例如:8)。


计算该月第一天和最后一天:

第一天: 在某个备用单元格(例如C1)输入公式计算该月 1 号的日期:=DATE(A1, A2, 1) (结果会显示为2025/8/1,格式问题后面处理)。

最后一天: 在另一个备用单元格(例如C2)输入公式计算该月最后一天的日期:=EOMONTH(C1, 0) (EOMONTH 函数返回指定日期之前或之后月份的最后一天。0 表示同月)。



设置星期表头:

B4:H4 单元格区域依次输入:星期日星期一、...、星期六(范围是B4:H4,共 7 列)


构建日历主体(核心公式):

确定起始位置: 日历的第一天(1 号)需要放在它对应的星期几下面。我们利用该月 1 号的星期几来确定第一行从哪一列开始写日期。

第一个日期单元格(B5) 输入以下公式:=IF(MONTH($C$1)<>$A$2, "", IF(WEEKDAY($C$1, 2)>COLUMN(A1), "", IF(ROW(A1)=1, $C$1, IF(B4+1<=$C$2, B4+1, ""))))

公式解释(逐层拆解):

MONTH($C$1)<>$A$2:检查C1(该月 1 号)的月份是否不等于A2(输入月份)。理论上不会出现,可视为保护性判断。如果为真(月份不同),返回空字符串 ""(显示空白)。

WEEKDAY($C$1, 2)>COLUMN(A1)

WEEKDAY($C$1, 2):计算C1(该月 1 号)是星期几。参数 2表示星期一=1,星期二=2,...,星期日=7。

COLUMN(A1):当公式被向右拖动时,A1会变成B1, C1... 所以COLUMN(A1)返回 1,COLUMN(B1)返回 2,依此类推。

这个条件判断:如果 1 号是星期 X(数字表示),那么在第 1 行(ROW(A1)=1),只有从第 X 列开始的单元格才应该显示日期。它检查当前列号(由COLUMN(A1)动态获取)是否小于 1 号的星期数。如果小于,说明这个格子应该在 1 号之前,留空("")。

IF(ROW(A1)=1, $C$1, ...):如果当前是日历的第一行(ROW(A1)=1),则显示该月的第一天$C$1

IF(B4+1<=$C$2, B4+1, "")

如果当前不是第一行(即第 2 行及以下),则检查左侧相邻单元格B4,注意公式在B5B4是它正上方那个单元格)的值加 1(即下一天)是否小于或等于该月最后一天($C$2)。

如果是,则显示下一天(B4+1)。

如果不是(说明已经超过该月最后一天),则显示空字符串 ""

关键技巧: 这个公式写在B5,但它会引用其上方的单元格B4在真正填写日历之前,B4是星期表头(文本),B4+1会出错! 所以我们需要:

先在第一行(第 5 行)写公式:B5输入上面的公式。

暂时忽略错误: 输入后B5可能会显示错误(#VALUE!),因为B4是文本。不用管。

填充公式:

向右拖动B5的填充柄,一直拖到H5(覆盖星期日到星期六)。

同时选中B5:H5,向下拖动填充柄,拖足够多行(通常 6 行足够涵盖所有月份)。现在整个区域可能显示很多错误或空白。



修正第一天公式并填充:

修改B5公式: 上面的公式在B5(日历主体区域的第一个单元格)还不能完美工作,因为它依赖B4(表头)。我们需要让B5能独立计算它是否该显示 1 号。

更新后的B5公式:=IF(MONTH($C$1)<>$A$2, "", IF(WEEKDAY($C$1, 2)>COLUMN(A1), "", $C$1))

这个简化版只处理第一行第一个可能显示日期的位置:

如果月份不匹配,显示空。

如果当前列号(COLUMN(A1))小于 1 号的星期数(WEEKDAY($C$1, 2)),显示空。

否则,显示该月第一天$C$1

C5公式(第一行第二个单元格):=IF(MONTH($C$1)<>$A$2, "", IF(B5="", "", IF(B5+1<=$C$2, B5+1, "")))

如果月份不匹配,显示空。

如果左边的单元格(B5)是空的,说明还没到 1 号或者已经处理完了,那么我也显示空。

否则,如果左边的单元格(B5)的日期加 1 小于等于最后一天($C$2),就显示下一天(B5+1)。

否则(超过最后一天),显示空。

填充第一行:

B5输入更新后的公式。

C5输入上面的C5公式。

选中C5向右拖动填充柄到H5。现在第一行(B5:H5)应该正确显示了从 1 号开始的日期(出现在正确的星期列下),之前不属于本月的列显示空白。

填充后续行:

第二行第一个单元格(B6) 输入公式:=IF(MONTH($C$1)<>$A$2, "", IF(H5="", "", IF(H5+1<=$C$2, H5+1, "")))

解释:检查月份。如果上一行最后一个单元格(H5) 是空的(说明上一行结束或未开始),我显示空。否则,如果H5+1(即上一行星期六的下一天)小于等于最后一天,就显示H5+1(星期日)。否则显示空。

第二行第二个单元格(C6) 输入公式:=IF(MONTH($C$1)<>$A$2, "", IF(B6="", "", IF(B6+1<=$C$2, B6+1, "")))

这和C5公式逻辑一样:如果左边(B6)有日期,就显示下一天。

填充第二行:

选中C6,向右拖动填充柄到H6

填充整个区域:

选中第二行(B6:H6)

向下拖动填充柄,拖足够多行(5-6 行)。现在日历应该根据A1A2的输入动态生成了!


格式化:

日期格式: 选中整个日历主体区域(B5:H10 或你填充的区域),按 Ctrl+1 -> “数字” -> “自定义” -> 在“类型”框中输入 d (只显示天)或 d 日。点击“确定”。

隐藏错误值(可选): 如果仍有单元格显示#VALUE!(通常在不该显示日期的地方),可以用条件格式或IFERROR函数包裹公式使其显示空白。更简单的方法是确保公式逻辑覆盖所有情况(上面的

相关推荐

引爆朋友圈!我用npx一行命令“偷”光了微信热门文章

嘿,各位朋友们,大家好!怎么优雅地获取微信公众号的热门文章?你可能会说,这不就是爬虫吗?用Pythonrequests+BeautifulSoup,或者Node.jsaxios+che...

Islands Architecture(孤岛架构)在携程新版首页的实践

一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:...

开源的 Gitee+ 微信小程序,提供仓库浏览、检索等功能

总在用我们国产的码云Gitee代码托管平台,但该平台还没有一个我用着顺手的小程序,于是Gitee+就诞生了。界面截图:仓库地址请在Gitee上搜索“Gitee+”。准备工作在开发Gite...

首例iPhone 15 Pro电池鼓包事件出现 原因可能是过热

iPhone15Pro和iPhone15ProMax的过热问题早已传得沸沸扬扬,一些用户抱怨这两款旗舰机手感过热。不过,他们都没有遇到电池鼓包的问题,直到今天,一位Redditor...

一看就会一搭就废?分享7个亲测有效的穿搭“套路”

晚上好啊~最近写了不少穿搭稿,每次看评论经常能看到这样的留言:眼睛:我已经学会了~手:我有自己的想法。还有同学留言:一看就会,一搭就废。不奇怪!知易行难嘛。明明学了很多穿搭技巧,等到自己要穿的时候就忘...

十个网络安全小技巧 防止个人信息泄漏

随着社会的进步和发展,个人信息泄露事件层出不穷。当个人信息泄漏后,轻则会收到漫天飞舞的短信,重则可能造成经济损失。因此为了不影响正常的生活,需要时时刻刻警惕自己的信息不被泄露。那么如何才能有效地防止个...

2018国家网络安全宣传周系列动漫③丨如何防止电脑被偷窥?这几招教你逮住黑客

来源:光明网2018国家网络安全宣传周系列动漫③——个人电脑安全篇电脑已经成为人们日常重要的工具之一,但电脑安全防护意识却在大众心目中并不完善,再之,信息安全系统的不完善,很容易成为黑客的攻击目标。无...

「网络安全宣传周」送您一份安全上网指南

网络安全学习9月17日-24日是国家网络安全宣传周,今年的主题是“网络安全为人民,网络安全靠人民”。我们作为一名合格的好网民,要具备一定的网络安全知识和网络安全防护技能,更要注意提高网络安全意识,防范...

职场达人都在偷偷用的Excel神技:WEEKDAY函数让日期秒变星期几

你是不是经常需要查看某个日期对应星期几?还在手动翻日历?作为Excel函数专家,今天我要教你一个超实用的技巧——用WEEKDAY函数一键判断日期是周几!这个函数看似简单,但灵活运用能解决工作中的各...

制作 Excel 日历的两种思路:手动创建和 使用公式动态生成

制作Excel日历主要有两种思路:手动创建(简单灵活)和使用公式动态生成(自动更新)。下面我将分别介绍两种方法,并提供详细步骤:...

Web OS 时代就在眼下,只是你还没注意到 App as a Browser 这个事实

这篇文章由36Kr新来的99(1999)后作者Link编译得来。文章作者LukeWroblewski是现任Google产品主管,他此前参与创立的Bagcheck和Polar...

如何在Form表单中添加WebBrowser控件,vba编程学习

vba编程中,如果需要显示某个网页的内容可以使用WebBrowser控件来实现。方法也比较容易,下面介绍一下如何在Form中添加WebBrowser控件。1、打开WindowsExcel,同时按A...

DevExpress Demo示例展示:媲美Excel的电子表格控件

今天介绍一个很强大的电子表格(Spreadsheet)控件:DevExpressSpreadsheetforASP.NETMVC。它是一个仿ExcelUI的电子表格控件,可完全无障碍读写...

Word,Excel,PPTOffice文件Web浏览器预览

前两天接到一个需求:需要在线预览用户上传的Word,Excel,PPT文档前端同事一听到这个需求,心里就开始骂了,什么鬼需求啊,浏览器怎么打开Word,Excel吗?这个要开发一个浏览器插件,这...

web报表工具有什么好推荐_webi报表

接触数据分析,到深入参与企业数字化转型和数据行业建议,已将近8年多,对数据分析、报表工具还是有些个人经验。我从个人的经验角度,和大家说说我用过哪些web报表工具。首先是开源的web报表:BIRTPr...