首页 > 解决方案 > 如何从范围创建数组?

问题描述

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

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

如上所述,当我指定数组的元素时,此代码可以正常工作。但是,当我尝试从一系列数据中创建一个数组时,根据这篇文章,我的函数 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

也许它在一个版本中被保存为不同的数据类型而不是另一个?我不知道为什么第一个代码有效而第二个无效,我宁愿能够从工作表中读取数组,也不愿指定代码中的每个元素(它比三个元素长得多)。

标签: excelvba

解决方案


如上所述,从 a 创建的数组range是二维的。My_Dictionary(x)因此,不要像访问元素那样访问My_Dictionary(x, x).

Application.Transpose在您的列上使用一维数组。

My_Dictionary = Application.Transpose(Range("A1:A3")).


旁注

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

我会将该名称更改为类似的名称acceptableValuesacceptableEntries使其更清楚它包含的内容。

无论您使用什么名称,我都会从子名称和变量中删除下划线。这在 VBA 中具有特殊含义,并且可能会导致您在路上出错。


推荐阅读