Excel生成随机不重复的日期

时间:2024-10-12 22:57:40

1、打开Excel表格后,按下【Alt+F11】组合键打开VBA编辑器。

Excel生成随机不重复的日期

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

Excel生成随机不重复的日期

3、在模块的代码框里边输入以下VBA程序代码:Sub RndDate()Dim mo, da, md, ro, i1, i3On 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 IfLoopEnd IfNextEnd Sub

Excel生成随机不重复的日期

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

Excel生成随机不重复的日期

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

Excel生成随机不重复的日期

6、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生成随机不重复的日期
© 手抄报圈