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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录