Excel VBA之函数篇-3.10变态的老板要求(2),按照星
前景提要
昨天我们分享了如何判断一个日期是否是周末,对于部分老板的这种个性要求,也是得到了解决,然而事实并非我所预料的这般,当那篇文章写出去没有多久之后,我一同事就问我,能不能将所有的日期都转化成为星期啊,我当时就方了,难道老板看到了我的文章!赶紧询问了下,原来是我们公司的老板也提出过同样的要求,老板想要知道每个每天的产品订单数据,按照星期这样的方式来汇总,方便他了解订单的分布规律以及员工的工作饱和度。
看来这样的需求,并不仅仅出现在我们之前假设的商场店铺中啊,通信行业居然也有这样的需求啊,既然如此,那么我们就有必要来学习下如何将日期转化成为具体的星期几了
函数说明
想要将日期转化成为星期,方法有很多,在VBA中比较简单实用的就是通过format()函数来实现,format()主要是用来转化数据格式的,在之前最初我们学习创建文件夹的时候,也接触过,那一次我们是用它来指定日期的格式的,不知道小伙伴们还有没有印象,今天我们就尝试用它来转化日期格式,为了让代码更加的有通用性,我们这里尝试将日期转化成为中文的星期几,英文的星期几这两种不同的格式,也方便一些外企工作需要的童鞋。
这里的场景,我想了下,我同事的使用场景是现成的第三方数据,来源可能是网络导出或者是其他渠道的手工汇总数据,日期格式不排除是多种多样的,这里我们就大致按照这样的场景来写代码,后期大家还有什么其他的场景需求或者是建议,也可以告诉我,我再优化,毕竟我的思维也有限制。
上代码
这里假设我们模式的表格是这样的(记性好的童鞋应该记得这是我们之前将简单的数据录入的时候的表)
image.png这里假设这些都是我们的销售产品的日期,可以看出来,销售日期因为不同的来源和人为的输入习惯的不同,非常的乱,这里我们尝试着直接转化成为统一的星期格式,并且区分中文和英文两种格式。
Sub test()
Dim LastCol&, i&, CH$, EN$
LastCol = Cells(Rows.Count, "I").End(xlUp).Row
For i = 2 To LastCol
CH = Format(Cells(i, "I"), "aaaa")
EN = Format(Cells(i, 9), "dddd")
Cells(i, "I").Offset(0, 1) = CH
Cells(i, "I").Offset(0, 2) = EN
Next i
End Sub
我们来看看最终的效果
image.png虽然日期格式的不相同,但是我们还是成功的转化成为了统一的星期几的格式,效果非常的完美,这里我们随机抽查一个来看看是不是对的
image.png代码解析
本次的代码依然是非常的简单,遵循简单实用,首先我们先获得当前日期那一列总共有多少行
LastCol = Cells(Rows.Count, "I").End(xlUp).Row
这个代码的使用方法,我们在之前就已经学习过了,不知道大家有没有留意到,我在今天的这个使用方法和之前的有一点不一样的地方,在之前我们再“I”这里是填写输入的,代表I是第几列就写入数字几,但是随着我们要求的不断的提升,我们不可能每次都去数是第几列,所以这里我们升级下,写成对应的列的名称也是可以的,注意,这里一定要加双引号,否则会报错的。
之后就是简单的遍历循环结构体了,这里重点介绍下format()函数如何转化成为日期的,其实也不难,大家只需要记住格式就是format(date,格式要求),date就是我们要转换的日期,格式有很多种针对本案例,我们主要是使用“aaaa”转换成为中文星期几的格式,“dddd”转换成为英文星期几的格式,后面当我们讲到format函数的时候,我给多列举一些常用的格式告诉大家,方便大家根据不同的场合灵活转换自己的需求
之后我们得到了中文的星期,和英文的星期之后就可以填入表格中了,这里依然是使用offset()函数来实现的,之前已经说过很多次了,只要是用来实现单元格的位移的,后面我们会单独讲下他的用法。
完整代码及注释
Sub test()
Dim LastCol&, i&, CH$, EN$
LastCol = Cells(Rows.Count, "I").End(xlUp).Row '定位最后一行的位置
For i = 2 To LastCol '循环遍历
CH = Format(Cells(i, "I"), "aaaa") '转换成为中文星期
EN = Format(Cells(i, 9), "dddd") '转换成为英文星期
Cells(i, "I").Offset(0, 1) = CH
Cells(i, "I").Offset(0, 2) = EN
Next i
End Sub