Excel生成随机不重复的日期
来源:网络收集 点击: 时间:2024-03-07打开Excel表格后,按下【Alt+F11】组合键打开VBA编辑器。

在VBA编辑器的菜单栏上边点击【插入】、【模块】。

在模块的代码框里边输入以下VBA程序代码:
Sub RndDate()
Dim mo, da, md, ro, i1, i3
On Error Resume Next 忽略运行过程中可能出现的错误
Set mysheet1 = ThisWorkbook.Worksheets(Sheet1) 定义工作表
i1 = 0 i1的值初始化
For ro = 2 To 366 从第2行到366行
If mysheet1.Cells(ro, 1) Then 如果单元格不是空白,则
Do
i1 = i1 + 1 每执行一次Do循环,i1递增1
mo = Int(Rnd() * 12 + 1) 月份随机
If (mo = 7 And mo Mod 2 = 1) Or (mo = 8 And mo Mod 2 = 0) Then
da = Int(Rnd() * 31 + 1) 如果是1、3、5、7、8、10、12月份,其天数为31天
End If
If ((mo 7 And mo Mod 2 = 0) Or (mo 8 And mo Mod 2 = 1)) And mo 2 Then
da = Int(Rnd() * 30 + 1) 如果是4、6、9、11月份,其天数为30天
End If
If mo = 2 Then
da = Int(Rnd() * 28 + 1) 如果是2月份,其天数为28天
End If
md = mo 月 da 日 拼合成日期
i3 = Application.WorksheetFunction.CountIf(mysheet1.Range(B2:B366), md)
If i3 1 Then 如果在B2:B366里边出现的日期不重复,则
mysheet1.Cells(ro, 2) = md 把日期写入相应的单元格
Exit Do 退出Do循环
End If
If i1 200000 Then 如果循环次数大于200000,则退出循环
Exit Do
End If
Loop
End If
Next
End Sub

输入完程序之后,按下【F5】键运行程序,或者在VBA编辑器的工具栏上点击“运行”图标运行程序。

回到Excel工作表界面,将会看到生成的随机日期。

VBA程序、思路解析:
(1)Int是取整函数,Rnd是大于或等于0且小于1的随机数,日期、月份都没有从0开始的,所以使用随机函数乘以相应的数值后加1再取整(如:Int(Rnd() * 12 + 1));
(2)在判断月大(31天)、月小(30天)时,可以使用余数函数Mod取余来判断,这样就不用一一的写出判断条件(如:If (mo = 7 And mo Mod 2 = 1) Or (mo = 8 And mo Mod 2 = 0) Then);
(3)Countif函数主要用来判断存在相同数值的个数,如果存在的个数为0,那正好说明该数值(日期)不存在重复,可以把它写入到单元格里边;
(4)使用Do……Loop循环时,应当避免死循环的出现(如:计算超过指定的次数时强制退出Do循环)。如果出现死循环,整个工作表将会出现无响应的现象。

个人经验,仅供参考。
EXCEL编程语言版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_286916.html