在VBA中,你可以使用多种方法来生成随机数,并根据需要进行排列组合。以下是一些常用的方法和示例代码:
生成指定范围内的随机整数
使用 `Int((maxVal - minVal + 1) * Rnd + minVal)` 公式来生成指定范围内的随机整数。例如,生成1到100之间的随机整数:
```vba
Sub 生成简单随机数()
Dim ws As Worksheet
Dim i As Integer
Dim 随机数 As Integer
Dim minVal As Integer
Dim maxVal As Integer
' 设置工作表
Set ws = ThisWorkbook.Sheets("Sheet1")
' 设置随机数范围
minVal = 1
maxVal = 100
' 在 A 列生成 10 个 1 到 100 之间的随机整数
For i = 1 To 10
随机数 = Int((maxVal - minVal + 1) * Rnd + minVal)
ws.Cells(i, 1).Value = 随机数
Next i
End Sub
```
生成指定数量的随机数并排列组合
你可以使用循环和数组来实现随机数的排列组合。例如,将一组数随机分成若干行:
```vba
Sub 随机排列组合()
Dim ws As Worksheet
Dim i As Integer, j As Integer, k As Integer
Dim arr() As Variant
Dim lines As Integer
Dim nums As Integer
Dim lastRow As Long
' 设置工作表
Set ws = ThisWorkbook.Sheets("Sheet1")
' 获取数据范围的最后一行
lastRow = ws.Cells(ws.Rows.Count, 12).End(xlUp).Row
' 假设 B1 是原始数据,D1 是等分值
arr = Split(ws.Cells(1, 2).Value, ",")
lines = Val(ws.Cells(1, 3).Value)
' 计算每一行的个数
nums = UBound(arr) \ lines + 1
' 处理前 lines-1 行
For i = 1 To lines - 1
For j = 1 To nums
ws.Cells(i, 12 + j).Value = arr(i * nums + j - 1)
Next j
Next i
' 处理最后一行
For i = 1 To UBound(arr) - (lines - 1) * nums
ws.Cells(lines, 12 + i).Value = arr(i + (lines - 1) * nums)
Next i
End Sub
```
生成随机数据并填充到表格中
你可以使用循环和随机函数来生成随机数据,并填充到表格中。例如,生成随机姓名、随机整数和随机日期:
```vba
Sub 自动生成随机数据()
Dim ws As Worksheet
Dim i As Long, j As Long
Dim 姓名列表 As Variant
Dim 随机日期 As Date
Dim minVal As Integer, maxVal As Integer
' 设置工作表
Set ws = ThisWorkbook.Sheets(1)
' 设置随机数范围
minVal = 1
maxVal = 1000
' 获取数据范围的最后一行
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 填充随机姓名
For i = 1 To lastRow
ws.Cells(i, 1).Value = "姓名" & i
Next i
' 填充随机整数
For i = 1 To lastRow
ws.Cells(i, 2).Value = Int((maxVal - minVal + 1) * Rnd + minVal)
Next i
' 填充随机日期
For i = 1 To lastRow
ws.Cells(i, 3).Value = DateSerial(Year(Date), Month(Date), Day(Date) + Int((maxVal - minVal + 1) * Rnd + minVal))
Next i
End Sub
```
这些示例代码展示了如何在VBA中生成随机数,并根据需要进行排列组合。你可以根据具体需求调整代码,以满足不同的应用场景。