首页 > 解决方案 > 选择范围内的随机单元格

问题描述

我正在尝试在 VBA 中对一系列单元格执行操作。我希望单元格的选择是随机的,而不是按照范围设置的顺序。

Sub Solver_Step_Evo()
    Set Rng = GetRange(ThisWorkbook.ActiveSheet.Range("Variable_Range"))
    For Each i In Rng
       'perform an action on I where I is randomly selected.
    Next i
End Sub

我的偏好是它随机化顺序,而不仅仅是随机选择一个可以多次选择一个单元格的单元格。

提前致谢。

标签: excelvbarandomrangerandomized-algorithm

解决方案


这是一个可能的解决方案。我将相关范围内的所有单元格添加到集合中。然后,我使用随机索引导航集合。访问索引后,我将其从集合中删除并重复该过程。

这对你有用吗?

编辑:无需c.Count为每次迭代调用该方法。我们可以自己解决这个问题。它可能比调用对象的方法更有效。

Sub SuperTester()
    Dim c As Collection
    Dim rng As Range
    Dim cel As Range
    Dim idx As Long
    Dim remainingCount As Long
    
    Set rng = Range("A2:A17")
    Set c = New Collection
    
    For Each cel In rng
        c.Add cel
    Next cel
    
    remainingCount = c.Count
    While remainingCount > 0
        idx = WorksheetFunction.RandBetween(1, c.Count)
        Debug.Print c.Item(idx).Address
        c.Remove idx
        
        remainingCount = remainingCount - 1
    Wend
    
End Sub

推荐阅读