ad1

您当前位置:首页 > 综合资讯

如何用Excel制作漂亮的动态日历

来源:IT之家
时间: 2023-04-11 13:42
阅读量:4953       

原文标题:《这么牛 X 的漂亮动态日历,是怎么用 Excel 做出来的?》

大家好,我是在研究日历做法的小爽~

不知不觉,2023 年已经过去几个月啦~

之前我们介绍过,利用数据透视表制作日历。

也介绍过利用函数制作日历。

不过,有个小伙伴问,能不能用 PQ 制作日历?

我突然想到 PQ 法做日历,好像没给大家介绍过。

PowerQuery 里面也有很多日期类函数,也可以制作日历。(只不过难度会比数据透视表大一点点,而且还会涉及几个 M 函数。)

既然小伙伴们想学,那今天小爽将会带大家一步步编写 M 函数公式,来制作这个日历。

1、构造数据

在制作之前,我们先构造一个查询表,月的单元格,可以事先利用数据验证设置一个下拉列表。

具体步骤:

? 将查询表导入到 PQ 编辑器中。选中 A1:B2 单元格区域,在) 选项卡下,单击(来自表格 / 区域),进入 PQ 编辑器中。

单击 fx 可以新增一个公式步骤。

鼠标移动到需更改的步骤上,按右键,单击即可修改步骤名称。(后续重命名步骤都是点这里哦~)

PS:命名好步骤名称有助于提高公式的可读性。

? 新增步骤,获取查询表中年和月的第一天,步骤名称命名为「月份第一天」。

=#date0,源(月)0,1)

小 Tips:

= #date 主要是用来构造一个日期。

源 0 获取表中的年。

源 0 获取表中的月。

? 新建步骤,获取查询表中年月的最后一天。步骤名称命名为「月份最后一天」。

=Date.EndOfMonth

Date.EndOfMonth 函数可以返回日期当月的最后一天的日期。

? 新建步骤,将第一天和最后一天日期进行扩展。步骤命名为「月日期」。

=List.Transform..Number.From(月份最后一天),Date.From)

简单解释一下:在 M 函数表达式中,列表的表示方式是用 中括号,如下图,1,2,就是 1,2 形成的列表。

如果要表示 1 到 9 的列表,就是 1,2,3,4,5,6,7,8,9,可简写为 1..9,如下图:

由于日期的本质是个数值,所以我们可以先将日期利用 Number.From 先转为数值,然后再进行扩展。最后利用 Date.From 转为日期即可。

Number.From..Number.From(月份最后一天)

现在,一整个月的日期我们都做出来了。

观察日历表,可以发现,我们还需要得到日期中的日,星期数,以及每月周数 的相关数据。

所以我们下面三个步骤就是为了获取这三块的内容。

? 新建步骤,获取日期的天数。步骤命名为「获取日」。

=List.Transform

Date.Day 可以获取日期中的日。

? 新建步骤,获取星期数。步骤命名为「获取星期数」。

=List.Transform

Date.DayOfWeekName 可以获得日期的星期数。

? 新建步骤,获取日期对应的当前月的周数。步骤命名为「周数」。

=List.Transform,Date.WeekOfMonth)

Date.WeekOfMonth 可以获得日期对应的当月的周数。

到这里,我们已经把所需要的三个数据弄出来了。

2、转表透视

由于日历是个表,所以我们还需要将数据进行整合合并在一起形成一个表。

? 新建步骤,拼接成表。步骤命名为「数据」。

=Table.FromColumns

Table.FromColumns 可以按列转换为表。

? 日历表是个二维数据,所以我们还需要将星期数 进行透视处理。

选中 列,在(转换)选项卡下,单击(透视列),出现透视列弹窗,值列选择 (Column3) 列,单击(确定)按钮。

到这里,我们发现,星期数并不是按照我们想要的效果进行排序的。

只需要更改第二参数,就可以改变日期的顺序。

原本的公式:

=Table.Pivot数据List.Distinct数据),"Column2","Column3",List.Sum)

修改后的公式:

=Table.Pivot

当然,如果你想要的日期是 从星期日开始的,也可以通过改变第二参数的顺序来实现。

? 最后一步就是将我们不需要的 Column1 列,也就是显示月周数的列,进行删除即可。

选中 Column1 列,按鼠标右键-删除。

现在,我们的日期就制作完成啦~

? 最后将 PQ 做好的日历表加载到工作表中,就搞定了!

依次点击选项卡-(关闭并上载至),选择「现有工作表」并指定单元格位置。

3、自动更新

由于 PQ 每一次更改查询表的年月,都需要刷新一次,很麻烦。

所以,我们可以加个工作表事件,当 A2 和 A3 单元格发生值改变的时候,将表格全部进行更新。????????????

首先,将表格另存为.xlsm 格式。

然后,按住快捷键进入 VBA 编辑器中。

在当前工作表下。

输入这段 VBA 代码。

PrivateSubWorksheet_ChangeIfIntersect((A2:B2),Target)IsNothingThenExitSubThisWorkbook.RefreshAllEndSub

由于用到了 VBA 代码,所以我们必须将文件保存为 xlsm 格式,否则无法使用。

这下,每次更改查询表中的年月,日历也会自动刷新啦。

4、总结一下

本文主要介绍了日历的 PQ 做法,涉及以下日期 M 函数:

? 利用#date 构造一个日期;

? Date.EndOfMonth ,可以返回日期当月的最后一天的日期;

? Date.Day 可以获取日期的日;

? Date.DayOfWeekName 可以获取日期的星期数;

? Date.WeekOfMonth 可以获取日期当月对应的周数。

还有涉及转表,以及表透视(Table.Pivot)的函数。

综合来讲,PQ 做法跟数据透视表制作日历表,思维上比较相似。

数据透视表做法是通过日期函数获取月份,天数,星期数,周数作为数据源,然后通过创建透视表达到制作日历表的方式。

PQ 做法也是比较类似,但是相比于数据透视表方法要稍微复杂些。

声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多企业信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。投资有风险,需谨慎。

推荐阅读

 ,手机市场最快要到下半年才有望开始复苏,各大芯片厂商普遍押注2024年,其中联发科、高通皆准备在今年下半年推出采用台积电4纳米打造的新品,唯独苹果跨入3nm世代

2023-04-11 13:42

 感谢IT之家网友航空先生的线索投递! ,国家能源之声公众号发文,国家能源集团那曲市色尼区欧玛亭嘎100兆瓦风电项目开工。该项目是西藏已核准装机规模最大的风电项

2023-04-11 13:42

 号称可以一句话拍大片的AI视频生成工具Gen-2,开始露出庐山真面目。 有推特博主已经率先拿到了内测资格。 这是他用提示词“一个身材匀称or对称的男人在酒吧

2023-04-11 13:42

 感谢IT之家网友航空先生的线索投递! ,中国石化宣布,“西氢东送”输氢管道示范工程已被纳入《石油天然气“全国一张网”建设实施方案》,标志着我国氢气长距离输送管

2023-04-11 13:42

 ,CHERRY此前推出了MX1.1TKL键盘,采用悬浮式设计。现在雪原极光版本已上市,售价429元,采用RGB酷炫灯效,搭配高透键帽及悬浮结构,光彩熠熠;多种可

2023-04-11 13:42

 ,小米13Ultra手机已官宣采用徕卡最新Summicron镜头,将于4月发布。而这次小米13Ultra也将面向国际市场推出。小米13Ultra手机近期已通过新

2023-04-11 13:42

 俄罗斯电信运营商Beeline公司人工智能和数字产品部音频分析和语义分析技术主管里纳特·加利亚莫夫表示,尽管神经网络具有处理和分析大量数据的能力,但其无法在诸如

2023-04-11 13:42

 感谢IT之家网友肖战割割的线索投递! ,根据洛图科技最新发布的《中国电视市场品牌出货月度追踪(ChinaTVMarketBrandShipmentMonthl

2023-04-11 13:42

金融之家
关注我们
foot01
foot02
ewm
foot03
foota footb footc footd foote footf