【问题标题】:How to compare an array string with a range value如何将数组字符串与范围值进行比较
【发布时间】:2021-08-24 17:54:49
【问题描述】:

我在字典中提取了唯一的人名,然后将它们放入一个数组中:

'Extract the dictionary's keys as a 1D array
    Dim result As Variant
    result = dic.Keys

效果很好 - 我可以看到名为 result 的数组中的唯一名称 - Jane、Bob 等,其中:MsgBox Join(result, vbCrLf)

它使用一个名为 valCounter2 的循环变量,所以我应该能够使用 result(valCounter2) 循环遍历数组

现在我正在尝试在 CX 列中查找这些名称:

    Dim LSearchRow As Integer
        LSearchRow = 2
        While Len(Range("A" & CStr(LSearchRow)).Value) > 0
            If Range("CX" & CStr(LSearchRow)).Value = result(valCounter2) Then

最后一行是问题所在。如果我将该行设置为实际值,则它可以工作。所以这有效: If Range("CX" & CStr(LSearchRow)).Value = "Jane Smith" Then

如何让它使用数组变量?

【问题讨论】:

  • 保持字典不变并循环范围并使用字典对象的.exists会更好吗?

标签: excel vba


【解决方案1】:

您需要在数组元素之间进行迭代,或者使用 Match 来检查字符串是否存在。请尝试下一个代码:

Sub CheckArrayElements()
  Dim LSearchRow As Long, mtch As Variant
        'result should be take from somewhere else...
        LSearchRow = 2
        Do While Len(Range("A" & LSearchRow).Value) > 0
            mtch = Application.match(Range("CX" & LSearchRow).Value, result, 0)
            If IsNumeric(mtch) Then 'the string has been found
                'do here what you need
            End If
            LSearchRow = LSearchRow + 1
        Loop
End Sub

上面的 sub 仅向您展示了如何处理数组,以便进行比较。

如果数组来自字典并且您不想只了解数组,那么按照您在第一条评论中收到的建议会简单得多。

【讨论】:

  • 我从 6 行开始,有 4 个唯一名称。现在它给了我 24 行这样的组合。
  • @Transitioned 上面的代码与行数和唯一名称无关。您必须注意在第二行和最后一行之间不得存在空单元格,因为在这种情况下它将退出循环。如果有可能是这样的空单元格,请说明,我也会调整代码来处理这种情况。现在,你想学习如何检查一个范围与一个数组,独立于它的出处,还是一个来自字典的范围?在最后一种情况下,代码应该更简单(参见 Nathan_Sav 放置的第一条注释)。
  • 抱歉不理解。我的问题是如何使用我存储的唯一名称来匹配然后执行操作。当我在行中看到结果时: mtch = Application.Match(Range("CX" & LSearchRow).Value, result, 0) 我认为这意味着存储在结果数组中的值。不是真的?
  • @Transitioned 你不明白什么(来自我的评论)?为什么你认为上面的代码不能解决你的问题,与数组中的数字或行或元素无关? 你试过了吗?是的,正如我在代码中评论的那样,它会将单元格值与数组元素之一匹配,并且只有在存在这样的匹配时才会执行某些操作。
  • 是的,感谢您提供的代码,我已经尝试过了。这就是给我 24 行的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多