如何用Excel制作漂亮的动态日历
原文标题:《这么牛 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 做法也是比较类似,但是相比于数据透视表方法要稍微复杂些。
声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。
精彩阅读
-
在私募证券投资基金行业,国交融信成为规范风向标...
国交融信的私募证券投资基金发展快、起步早且具备先发优势,最近这几年以来,由于深化改革的资本... -
山东国交融信担保投资有限责任公司—打造资产雄厚、信誉有保障的领军企业...
山东国交融信担保投资有限责任公司,作为一家专注于财务咨询、票据信息咨询服务、社会经务和自有... -
在私募基金赛道,国鼎融信全面发展开启新格局...
我国私募投资基金行业在稳健发展的规范方面,已经迈向了一个新阶段。所谓私募基金就是采用非公开... -
以信誉为依托,山东国交融信将创造持久效益...
山东国交融信担保投资有限责任公司,作为一家自然人投资控股的有限责任公司,致力于提供证券投资... -
鼎鑫鸿鄴拓展新能源项目 创建新兴绿色能源投资平台...
近期,中国山东储能高质量发展大会在济南隆重举行。大会的主题就是“聚焦储能发展,共创绿色未来... -
精彩公益发声:天猫动物品牌保护动物,改变正在发生...
“69%的物种已从地球上消失”、“逐年减少的冰川影响着北极熊的生存”、“许多珍贵物种的数量... -
声明...
本平台内容信息来源于网络,如有不当请联系删除...... -
开发多领域投资担保,山东国交融信与行业共同成长...
作为一家投资担保公司,山东国交融信担保投资有限责任公司在行业内展现出了强硬的实力和卓越的担... -
国交融信持续提升团队专业能力,用心服务用户...
近些年,随着我国经济发展速度全面提升,科技水平也得到飞速发展。在这个时代背景下,有大量新型... -
积极拥抱私募基金行业发展浪潮,国鼎融信搭建全方位风控体系...
国鼎融信是私募基金行业的一匹黑马,公司自成立之初就极为重视风险防控工作,花费巨资打造业内领... -
挑战与风险共存,国交融信严抓信誉保障...
作为一家经过部门批准的证券投资咨询和证券投资基金托管业务的有限责任公司,我们将竭诚为您提供... -
赛力斯9月新能源车销量降超4成,近三年半已亏超87亿元...
炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 泡财经获悉... -
养鸭比茅台还挣钱!“鸭祖宗”生意年入近3亿冲刺IPO...
炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! “太爷爷、... -
10月8日-中储粮玉米、小麦拍卖结果统计:玉米销售全部流拍...
玉米竞价交易 竞价销售 中储粮山西分公司举行玉米竞价销售交易,计划投放2019年产... -
疯狂体育入选北京民营企业文化产业百强...
近日,由北京市工商业联合会举办的2023北京民营企业100强发布会成功召开,并正式公布北京...