头条资讯网_今日热点_娱乐才是你关心的新闻

头条资讯 今日热点
娱乐才是你关心的新闻
首页 > 头条资讯 > 科技

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

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

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

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

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

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

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

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

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

具体步骤:

❶将查询表导入到PQ编辑器中。选中A1:B2单元格区域,在【数据】]选项卡下,单击【来自表格/区域】,进入PQ编辑器中。

单击fx可以新增一个公式步骤。(后续新增步骤都是点这里哦~)

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

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

❷新增步骤,获取查询表中年和月的第一天,步骤名称命名为「月份第一天」。=#date(源[年]{0},源[月]{0},1)

小Tips:

=#date(年,月,日)主要是用来构造一个日期。

源[年]{0}获取表中的年。

源[月]{0}获取表中的月。

❸新建步骤,获取查询表中年月的最后一天。步骤名称命名为「月份最后一天」。=Date.EndOfMonth(月份第一天)

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

❹新建步骤,将第一天和最后一天日期进行扩展。步骤命名为「月日期」。=List.Transform({Number.From(月份第一天)..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)

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

❻新建步骤,获取星期数。步骤命名为「获取星期数」。=List.Transform(月日期,Date.DayOfWeekName)

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

❼新建步骤,获取日期对应的当前月的周数。步骤命名为「周数」。=List.Transform((月日期),Date.WeekOfMonth)

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

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

2、转表透视

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

❶新建步骤,拼接成表。步骤命名为「数据」。=Table.FromColumns({周数获取星期数获取日})

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

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

选中[Colum2]列,在【转换】选项卡下,单击【透视列】,出现透视列弹窗,值列选择[Column3]列,单击【确定】按钮。

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

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

原本的公式:=Table.Pivot数据List.Distinct数据[Column2]),/"Column2/",/"Column3/",List.Sum)

修改后的公式:=Table.Pivot(数据,{/"星期一/",/"星期二/",/"星期三/",/"星期四/",/"星期五/",/"星期六/",/"星期日/

未经允许不得转载:头条资讯网_今日热点_娱乐才是你关心的新闻 » 如何用excel制作漂亮的动态日历

分享到:更多 ()
来源:浅语科技 编辑:科技

评论

留言/评论 共有条点评
昵称:
验证码:
匿名发表