如何从Range创建数组?

时间:2019-06-21 13:27:31

标签: excel vba

我正在使用我写的称为“包含”的函数来确定数据列中的条目是否与预定的“可接受”值字典匹配。

Sub Validate_Data()

    Dim My_Dictionary As Variant
    My_Dictionary = Array("Entry1", "Entry2", "Entry3")

    Dim Destination As Range
    Set Destination = Range("C2:C10")

    For Each cell In Destination
        cell.FormulaR1C1 = Contains(My_Dictionary, cell)
    Next cell
End Sub

如上所述,当我指定数组的元素时,此代码工作得很好。但是,当我尝试根据this帖子从一系列数据创建数组时,我的函数Contains不再起作用

Sub Validate_Data()

    Dim My_Dictionary As Variant
    My_Dictionary = Range("A1:A3").Value

    Dim Destination As Range
    Set Destination = Range("C2:C10")

    For Each cell In Destination
        cell.FormulaR1C1 = Contains(My_Dictionary, cell)
    Next cell
End Sub

也许在一个版本中将其另存为另一种数据类型吗?我无法弄清楚为什么第一个代码行得通,而第二个代码行不通,我宁愿能够从工作表中读取数组,而不是在代码中指定每个元素(它比三个元素长得多)。

1 个答案:

答案 0 :(得分:0)

如上所述,从;创建的数组是二维的。因此,与其访问range之类的元素,不如访问My_Dictionary(x)

要获取一维数组,请在您的列上使用My_Dictionary(x, x)

Application.Transpose


旁注

@bigben是正确的,我立即感到困惑,因为我认为您正在使用Scripting.Dictionary对象。

我会将其更改为My_Dictionary = Application.Transpose(Range("A1:A3"))acceptableValues之类的名称,以使其更清楚地包含其中的内容。

尽管我会从子名称和变量中remove the underscore来使用您使用的任何名称。这在VBA中有特殊的含义,并可能在以后为您带来错误。