咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

本文介绍的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

本代码为用户提供了一个快速、简便的方式来填充表的日期列,大大提高了工作效率。如果你经常需要进行工作,不妨试试这段代码,收藏起来,相信会对你的工作产生积极的影响。