用Excel制作的简易实用值班表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易实用的Excel值班表每年岁末年初时,公司都要安排值班,小编就使用Excel 制作了一份简易的值班表,只要选择年份(小编设定的是2019年到2050年,完全够用了)就可自动生成全年公历日期、星期和农历日期,然后再把单位值班人员快速填充进去,方便又实用,还可以使用很多年。
下面是小编制作的简易效果图,大家还可以再美化一下哦。
下面来说说小编的傻瓜式制作方法吧!
首先是日期方面,公历的日期就比较固定,闰年366天,
其他年份365天,这里就不多说了。关于农历日期,由于农历有着较为繁杂的计算方式,可在网上搜索关于农历数据代码。此处使用了https:///p-1433038214. html中提供的代码(代码提供了1899年到2100年共202年的农历数据,这里仅以使用2019年到2050年农历数据为例),并在sheet1工作表中直接调用了该代码定义的Get YLDate()函数。
值班人员的安排,小编是用lookup函数调用单位人员的名册内容(只调取了姓名和联系方式等相关内容,拷贝后放在Sheet2中)。
为了方便提醒,小编在条件格式中对周末和国家法定假日进行了浅颜色的填充设置。一份简易实用、可用很多年的值班表就做好了!
下面再说说其中的VBA代码吧(小编初学,比较傻瓜,仅供参考,欢迎交流指导改进)!
先说下给控件组合框ComboBox1赋值的代码(当然也有很多其他的方法):
Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ComboBox1.List = [{"2019";"2020";"2021";"2022";"2023";"2 024";"2025";"2026";"2027";"2028";"2029";"2030";"2031";"2032";"
2033";"2034";"2035";"2036";"2037";"2038";"2039";"2040";"2041"; "2042";"2043";"2044";"2045";"2046";"2047";"2048";"2049";"2050 "}]
End Sub
然后是在组合框ComboBox1选择年份然后自动在工作表单元格生成相应年份的公历日期、星期和农历日期的简易代码(这里是以A1单元格并合并单元格至E1作为大标题行,A2所在行为标题行,从A3所在行以下为显示全年日期、星期、农历日期等内容的区域,表尾再合并单元格作为备注内容区域):
Private Sub ComboBox1_Change()
Dim i As Integer, str1 As String, str2 As String, Y
Y = ComboBox1.Value
str1 = InputBox("默认如下:", "请输入标题,年份请保留", Y & "年值班表")
str2 = InputBox("默认如下:", "请在表底输入备注内容", "说明:如有特殊情况请提前告知,以便及时调整。")
Cells(1, 1) = str1
Cells(3, 1) = DateSerial(Y, 1, 1)
Cells(3, 2).Formula = "=IF($A3=" & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & ",IFERROR(TEXT($A3," & Chr(34) & "aaaa" & Chr(34) & ")," & Chr(34) & Chr(34) & "))"
Cells(3, 3).Formula = "=IF($A3=" & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & ",GetYLDate($A3))"
For i = 4 To 368
Cells(i, 1).Value = CDate(Cells(i - 1, 1)) + 1
Cells(i, 2).Formula = "=IF($A" & i & "=" & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & ",IFERROR(TEXT($A" & i & "," & Chr(34) & "aaaa" & Chr(34) & ")," & Chr(34) & Chr(34) & "))"
Cells(i, 3).Formula = "=IF($A" & i & "=" & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & ",GetYLDate($A" & i & "))"
Next
If Cells(368, 1) = DateSerial(Y, 12, 31) Then
Range("A368:E368").Rows.AutoFit
Cells(368, 2).Formula = "=IF($A368=" & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & ",IFERROR(TEXT($A368," & Chr(34) & "aaaa" & Chr(34) & ")," & Chr(34) & Chr(34) & "))"
Cells(368, 3).Formula = "=IF($A368=" & Chr(34) & Chr(34) & "," & Chr(34) & Chr(34) & ",GetYLDate($A368))"
Else
Range("A368:E368") = ""
Rows("368").RowHeight = 0.2
End If
With Range("A369:E369")