VBA 数组循环分配随机值 - 优化指南
VBA 数组循环分配随机值:最佳实践和代码示例
本教程演示了如何在 VBA 中使用 For Each 循环对数组中的每个区域进行随机值分配。
原始代码:
Sub AssignValues()
Dim rng As Range, cell As Range
Dim value As Double, addvalue As Double
'将所有要分配值的区域存入一个数组
Dim ranges(1 To 6) As Range
Set ranges(1) = Range("F10:K10")
Set ranges(2) = Range("L10:Q10")
Set ranges(3) = Range("R10:W10")
Set ranges(4) = Range("F11:J11")
Set ranges(5) = Range("L11:P11")
Set ranges(6) = Range("R11:V11")
'计算初始值和递增值
value = Int(((300 - 250 + 10) * Rnd) + 250) / 10 '从26.5开始递增
addvalue = Int(((210 - 150 + 10) * Rnd) + 150) / 10
'循环遍历每个区域,将值分配给它们
For Each rng In ranges
For Each cell In rng
cell.value = value
value = value + addvalue '递增值
Next cell
value = Int(((300 - 250 + 10) * Rnd) + 250) / 10 '重置初始值
Next rng
End Sub
错误提示: For each 数组的控件变量必须为变体
解决方案:
1. 修改控件变量类型:
要修改控件变量为变体类型,只需要在声明变量时加上 As Variant 即可,如下所示:
Dim rng As Variant, cell As Variant
Dim value As Double, addvalue As Double
2. For Each 循环无需指定变量类型:
在使用 For Each 循环时,不需要指定变量类型,因为它们已经被声明为变体类型:
For Each rng In ranges
For Each cell In rng
cell.Value = value
value = value + addvalue
Next cell
value = Int(((300 - 250 + 10) * Rnd) + 250) / 10
Next rng
完整优化后的代码:
Sub AssignValues()
Dim rng As Variant, cell As Variant
Dim value As Double, addvalue As Double
'将所有要分配值的区域存入一个数组
Dim ranges(1 To 6) As Range
Set ranges(1) = Range('F10:K10')
Set ranges(2) = Range('L10:Q10')
Set ranges(3) = Range('R10:W10')
Set ranges(4) = Range('F11:J11')
Set ranges(5) = Range('L11:P11')
Set ranges(6) = Range('R11:V11')
'计算初始值和递增值
value = Int(((300 - 250 + 10) * Rnd) + 250) / 10 '从26.5开始递增
addvalue = Int(((210 - 150 + 10) * Rnd) + 150) / 10
'循环遍历每个区域,将值分配给它们
For Each rng In ranges
For Each cell In rng
cell.Value = value
value = value + addvalue '递增值
Next cell
value = Int(((300 - 250 + 10) * Rnd) + 250) / 10 '重置初始值
Next rng
End Sub
提示:
- 您可以根据需要调整代码中的
ranges数组,以包含您想要分配值的区域。 - 您可以调整
value和addvalue的计算方法,以生成不同的随机值。
希望本教程对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/nPFo 著作权归作者所有。请勿转载和采集!