在动态创建的数组中定位单个值

时间:2019-05-31 17:00:58

标签: excel vba

我正在尝试创建一个动态数组。我需要使用动态数组的原因是因为我不知道开始时数组中需要有多少个变量。

在数组存在之后,我想解析数组中的范围,并且有时仅隔离其中一个范围的单个单元格值。不幸的是,我遇到了Object Required错误。

我已经在此站点和其他站点上进行了检查,找不到说明。也许人们对这些行动的称呼有所不同。

Sub get_val()

'get the number of rows
Dim id As Worksheet
Set id = ThisWorkbook.Sheets("ID Sheet")
rc = id.Range("B:B").Find(What:="*", After:=id.Range("B1"), LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row

'Find which ones have "yes" in column Q and create an array
Dim memcache As Variant
Dim x As Integer
x = 1
ReDim memcache(x)
For i = 3 To rc
    If id.Cells(i, 17).Value = "Yes" Then
        ReDim Preserve memcache(x)
        memcache(x) = id.Range("A" & i & ":M" & i)
        x = x + 1
    End If
Next i

'这是我遇到问题的地方。 “如果我想将一个范围复制到工作表上的另一个范围,那就很好

id.Range("A50:M50").Value = memcache(2) 'this works

'但是,如果我只想在范围内找到一个单元格的值,那将是行不通的。这将产生“需要对象”错误。

Debug.Print memcache(2).Cells(1, 2).Value 

“为了进行比较,可以创建一个范围

Dim cellrange As Variant

Set cellrange = id.Range("A9:M19")


Debug.Print cellrange.Cells(1, 2).Value ' this will work


End Sub

我希望能够获取数组中保存的每个范围内的单元格(1,2)的值,如果它们匹配特定条件,那么我将使用完整范围更新工作表上的另一个范围在该保存的数组中。

1 个答案:

答案 0 :(得分:0)

数组和范围在VBA中是不同的东西。数组只是值的数组,而范围是对工作表上一组单元格的引用。在这种情况下,Memcache是一个数组,但是您试图将其视为一个范围。 Memcache没有任何单元格,只有值。

您想要的是将Debug.Print memcache(2).Cells(1, 2).Value替换为Debug.Print memcache(2)

如果您显式设置变量类型,则区别更加明显,例如:

Dim memcache() As String '(or integer, or whatever type of data you're putting into it)
Dim cellrange As Range