【问题标题】:Excel VBA Array For Each Unique Values每个唯一值的 Excel VBA 数组
【发布时间】:2017-02-27 21:51:16
【问题描述】:

我尝试创建一个数组并用唯一值填充它。 由于检查该值是否是唯一的,我未能创建一个基本的“为每个”程序。 我只想创建一个唯一的随机数,将其放入一个数组中,创建另一个唯一的随机数并将其放入同一个数组中。 如果未能搜索有关该主题并且未能通过谷歌搜索该问题,因此我必须在 stackoverlofw 询问社区。​​p>

我没有任何有价值的代码,因为没有任何效果。

我只有一个谷歌代码,它在 excel 的单元格中对我有用,但在数组中没有。

For Each Cell In Selection.Cells

    Do
        rndNumber = Int((High - Low + 1) * Rnd() + Low)
    Loop Until Selection.Cells.Find(rndNumber, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing
    Cell.Value = rndNumber
Next

希望

【问题讨论】:

  • 您可能希望使用Scripting.Dictionary 作为容器,并将随机数作为键。如果您需要以数组形式使用它,只需转储.Keys 数组即可。
  • 容器在哪个星座中用于此类问题?在我的选项中,它必须很容易解决这个问题,只需“for each”和“do - loop until”实用程序 excel vba 提供。
  • 对你来说幸运的是,在你有足够的随机数来预期重复之前,excel 就会崩溃。只需用随机数填充一个数组,不用担心重复。
  • @Andrew - 嗯?我不确定我是否理解您的问题。
  • @Comintern 好的:我有一个数组。这个数组的范围是 x(对于这个任务并不重要) 让这个数组是一个有 x 个数字的一​​维数组。这个数组必须用随机的唯一数字填充。问题:必须在具有唯一数字的 excel vba 中制作它:)

标签: arrays excel vba foreach


【解决方案1】:
Option Explicit

Function GetRandomsArray(ByVal n As Long, Low As Long, High As Long)
    Dim rndNumber As Long

    If High - Low + 1 < n Then n = High - Low + 1
    With CreateObject("Scripting.Dictionary")
        Do
            rndNumber = Int((High - Low + 1) * Rnd() + Low)
            .Item(rndNumber) = 1
        Loop While .Count < n
        GetRandomsArray = .Keys
    End With
End Function

在“主要”子中使用如下:

Dim myArray As Variant

myArray = GetRandomsArray(5, 1, 10) '<--| get an array of 5 unique random numbers between 1 and 10

【讨论】:

  • Ooookay 这对我有用,但我不知道为什么 :D 谢谢你的例子!我必须逐步理解您的代码,因为我不想在不理解的情况下使用某些代码。但请确定:谢谢!
  • 不客气。根据@Comintern 的建议,它使用一个不允许重复键的 Dictionary 对象,因此只要需要汇总 n 个项目,它就会进行迭代。然后它将这些键转储到一个数组中。顺便说一句,您可能希望将此答案标记为已接受。谢谢!
  • @Andrew - 请参阅 StackOvedrflow 的 VBA 文档中的 Scripting.Dictionary object - Properties and Methods
猜你喜欢
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多