【Excel VBA编程】日期转星期的N层境界:从手动到自动,告别翻日历
- 2026-11-11 02:00:59
总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
在Excel的日常使用中,处理日期数据那就是家常便饭,而将日期格式数据转化为直观的“星期几”,更是提升表格可读性和分析效率的关键一步
1 实现功能
如下图所示,A列中存放的是日期类型的数据,现要求将它们转换成星期,并输出到B列

通常最简单的方式是使用TEXT公式并结合Excel自带的自动填充功能完成,如想显示中文星期使用“=TEXT(A2, "aaaa")”,或者使用“=TEXT(A2, "dddd")”还可以显示英文星期

然而,当这一步骤刚好是全自动化流程中的一个环节时,它会在预设的条件下自动触发并完成,整个过程就无法进行手工干预了
因此,面对需要高度自动化、追求“一键完成”效率的任务,理想的解决方案就是借助VBA宏。我们只需编写一小段代码,将其嵌入流程,即可实现瞬间转换,将我们从繁琐的重复性工作中彻底解放出来
看似南辕北辙的举动,实际则是为后续的自动化实现打下坚实的基础
2 代码及说明
2.1 操作步骤
打开Excel工作簿,另存为.xlsm
按下 Alt + F11 快捷键,打开VBA编辑器
在VBA编辑器左侧的“工程资源管理器”窗口中,右键点击你的工作簿名称,选择“插入” -> “模块” 将文中代码粘贴到新打开的模块代码窗口中
返回Excel界面,顺次选择【开发工具】【宏】,选择宏名“ConvertToWeekDay”执行
2.2 代码实现
代码处理数据的流程如下:
确定当前活动工作表,并自动计算数据范围
使用 For 循环,从第2行开始直至最后一行数据处理过程:读取单元格内数据,检查日期有效性,最后将日期转换成星期,写入当前行的B列单元格
由于Weekday返回1到7的整数,因此,还需要 Select Case 语句,将数字映射为对应的中文星期名称(如“星期一”、“星期二”等)
参考代码如下:
Sub ConvertToWeekDay()Dim ws As WorksheetDim lastRow As LongDim i As LongDim dateValue As VariantDim WeekDayName As StringSet ws = ActiveSheet '当前活动工作表lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '获取A列最后一行For i = 2 To lastRow '假设第1行是标题,从第2行开始dateValue = ws.Cells(i, "A").ValueIf IsDate(dateValue) Then'使用Weekday函数获取数字,再转换为中文名称Select Case Weekday(dateValue, vbSunday) '将星期日 (vbSunday) 定义为一周的第一天Case 1: WeekDayName = "星期日"Case 2: WeekDayName = "星期一"Case 3: WeekDayName = "星期二"Case 4: WeekDayName = "星期三"Case 5: WeekDayName = "星期四"Case 6: WeekDayName = "星期五"Case 7: WeekDayName = "星期六"End Selectws.Cells(i, "B").Value = WeekDayNameEnd IfNext iEnd Sub
3 结尾
好了,今天的编程知识到此结束了。最后分享一个冷知识:为何开机或打开大型软件时会卡顿?
程序运行时,所需数据都需要从硬盘加载数据到内存,CPU再与内存进行高速数据交换。由于硬盘(尤其是机械硬盘)读写速度慢,而CPU处理数据速度极快,因此,一旦加载完毕,操作就会流畅了
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识