基于通配符检索字典项值 - VBA Excel

时间:2017-11-16 12:46:49

标签: excel vba excel-vba dictionary

目前我在字典上运行,以便根据其中存储的密钥填充表中的缺失值。问题是我的表具有比存储在字典中的值更多的值(键)。在某些情况下,我的表中的信息类似于字典中的某个键,我想知道是否可以使用通配符来检索项目。示例如下:

字典中的示例记录:

  • 梅赛德斯(钥匙)车(项目)
  • 川崎(钥匙)电机(项目)

让我们假设我的表有以下条目:

  • Merc(关键)但缺少该项目,应该是" car"在这种情况下。

是否有可能实现这一目标?如果这个例子不好,我很抱歉,但我希望你们中的任何人都可以帮助我。

我发现了几篇关于这个主题的文章:

提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以编写一个返回布尔值的函数。

Public Function KeywordExists(ByVal Keyword As String) As Boolean
    Dim k As Variant
    For Each k In objDict.Keys  'Your dictionary object
        If Keyword Like "*" & k & "*" Then
            KeywordExists = True
            Exit For
        End If
    Next k
End Function

要打电话:

If KeywordExists("Foo") then '...

修改

要返回密钥,只需将返回类型更改为字符串。

Public Function StringKeyword(ByVal Keyword As String) As String
    Dim k As Variant
    For Each k In objDict.Keys  'Your dictionary object
        If Keyword Like "*" & k & "*" Then
            StringKeyword = K
            Exit For
        End If
    Next k
End Function

要打电话:

Dim key As String
    key = StringKeyword("Foo") 

答案 1 :(得分:0)

左栏回答:不要使用词典,不要使用之类的,因为这种方法太慢而且不能很好地扩展。请尝试其中之一:

  1. 使用高级过滤器,它接受通配符。您必须将数据转储到Excel中。但后来我假设数据已经在某个网格中。但是高级过滤器很快,我实际上在我构建的数据透视表过滤应用程序的幕后使用它,它允许用户在多个通配符和复杂的排除项上快速过滤数据透视表。
  2. 对已排序的数据使用二进制搜索算法。我经常发现它 通过将两个列表转储到Excel,最容易在Excel中执行此操作, 在那里排序,然后使用Double VLOOKUP技巧我说 关于这里: http://dailydoseofexcel.com/archives/2015/04/23/how-much-faster-is-the-double-vlookup-trick/
  3. 查尔斯威廉姆斯在这里有一篇很棒的帖子可能很有用,无论如何应该阅读: https://fastexcel.wordpress.com/2012/07/10/comparing-two-lists-vba-udf-shootout-between-linear-search-binary-search-collection-and-dictionary/