本文介绍的Excel VBA代码可以根据用户输入的参数,自动填充表中的日期列,同时支持选择填充唯一值或重复值。
效果预览
实现步骤
首先,代码会要求用户输入三个参数:开始日期、值班总天数和重复填充行数。用户可以根据实际情况输入这些参数,以确定表的日期范围和填充方式。此外,代码还会询问用户是否输入重复值,以根据用户的选择确定是否填充重复值。如下图:
接下来,代码将填充表的日期列A。如果重复填充行数为1,则逐行填充日期,不重复;否则,代码将根据重复填充行数进行填充。具体来说,代码会遍历每一天,对于每一天,会填充重复填充行数个日期单元格,其中第一个单元格填充唯一值,其余单元格填充重复值。通过这种方式,代码能够快速、准确地填充表的日期列,而且用户还可以选择是否填充重复值,以满足不同的需求。
完整代码
Sub FillSchedule()
Dim startDate As Date
Dim days As Integer
Dim cfhs As Integer
Dim j As Integer
Dim currentDate As Date
Dim i As Integer, k As Integer, rowOffset As Integer
'清除日期列中标题外的单元格内容
Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents
'获取开始日期和值班总天数
startDate = InputBox("请输入开始日期(格式:yyyy-mm-dd):", "高效工作", Date)
days = InputBox("请输入值班总天数:", "高效工作", 9)
cfhs = InputBox("请输入重复填充行数:", "高效工作", 3)
j = InputBox("请选择是否输入重复值:" & vbNewLine & vbNewLine & " 0=输入唯一值" & vbNewLine & " 1=输入重复值", "高效工作", 1)
'填充排班表的日期列A列
Range("A1").Value = "日期" '添加日期列标题
Range("A2").Value = startDate '填充起始日期
currentDate = startDate
For i = 1 To days
If cfhs = 1 Then
Range("A" & i + 1).Value = currentDate '逐行填充日期,不重复
Else
For k = 0 To cfhs - 1
rowOffset = (i - 1) * cfhs + k + 2
If k = 0 Then
Range("A" & rowOffset).Value = currentDate '填充唯一值
Else
If rowOffset - j >= 2 Then '确保行数不会超出范围
Range("A" & rowOffset).Value = Range("A" & rowOffset - j).Value '填充重复值
End If
End If
Next k
End If
currentDate = currentDate + 1 '日期加1
Next i
End Sub
本代码为用户提供了一个快速、简便的方式来填充表的日期列,大大提高了工作效率。如果你经常需要进行工作,不妨试试这段代码,收藏起来,相信会对你的工作产生积极的影响。