Excel生成随机不重复的日期

2025-10-20 03:23:52

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

Excel生成随机不重复的日期

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

Excel生成随机不重复的日期

3、在模块的代码框里边输入以下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

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生成随机不重复的日期

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢