arrays - 针对数组检查随机值以防止重复
问题描述
我目前正在尝试编写一个脚本,该脚本将从膳食列表中随机抽取一餐并将其输入到日历中。它产生 4 周(周日至周六),每周提供两餐。我想让它在每次从列表中随机抽取一顿饭时检查它已经抽取的饭菜,以防止同一顿饭在一个月内出现两次。以下是我写的:
Dim ranDnr As Integer
Dim ranDnr2 As Integer
Dim usdMls(3) As Integer
Dim usdMls2(3) As Integer
Sub GnrtMlsMnthClndr()
Randomize
For i = 0 To 3
For j = 0 To 3
For x = 2 To 17 Step 5
For y = 2 To 17 Step 5
ranDnr = Int(60 * Rnd + 1)
While IsInArray(ByVal ranDnr, ByVal usdMls) = True
ranDnr = Int(60 * Rnd + 1)
Wend
usdMls(i) = ranDnr
Worksheets("Sheet1").Cells(x, 1) = Worksheets("Sheet2").Cells(ranDnr, 1)
ranDnr2 = Int(60 * Rnd + 1)
While IsInArray2(ByVal ranDnr2, ByVal usdMls2) = True
ranDnr2 = Int(60 * Rnd + 1)
Wend
usdMls2(j) = ranDnr2
Worksheets("Sheet1").Cells(x, 9) = Worksheets("Sheet2").Cells(ranDnr2, 1)
Next y
Next x
Next j
Next i
End Sub
Public Function IsInArray(ByVal ranDnr, ByVal usdMls) As Boolean
'Dim i
For i = 0 To 3
If usdMls(i) = ranDnr Then
IsInArray = True
Exit Function
End If
Next i
IsInArray = False
End Function
Public Function IsInArray2(ByVal ranDnr2, ByVal usdMls2) As Boolean
'Dim i
For i = 0 To 3
If usdMls2(i) = ranDnr2 Then
IsInArray2 = True
Exit Function
End If
Next i
IsInArray2 = False
End Function
我对 VBA 真的很缺乏经验,完全不知道为什么这不起作用,因为这对我来说似乎是合乎逻辑的,并且在我运行它时不会产生任何错误。可以提供的任何帮助将不胜感激。
解决方案
推荐阅读
- javascript - 单击按钮时水平“插入”图像
- firebase - 以“is_”开头的 Firebase 集合文档键名从键名中删除了“is”
- python-3.x - 打印相关性大于 80% 的列
- php - 如何从 CakePHP AuthComponent 返回自定义错误?
- angular - Angular9 - @Input 装饰器问题
- sql-server - 如何编写安全的存储过程
- java - 关于 BiometricPrompt.authenticate()
- powershell - Powershell - 在 XML 中添加尖括号,同时保留空格
- typescript - 打字稿中具有泛型的子类型约束
- javascript - 比较两次并使用 JavaScript 获取下一次