【问题标题】:VBA/Excel - Matching Column values with pre-defined setsVBA/Excel - 将列值与预定义集匹配
【发布时间】:2019-11-10 13:25:27
【问题描述】:

我有一个案例,我有一组预定义的值/代码组合起来会产生一些消息。我还有一个传入文件,我必须对代码进行分析,将集合与预定义的值进行比较。问题是传入的文件与我的库不完全匹配:

在我的库中,我设置了 4 列,每一行都有其独特的含义。我想将这个含义作为一个字符串来进一步进行计算。问题是传入的文件不一致。它不遵循预定义文件中的确切顺序。

无论顺序如何,我都需要比较它们。匹配后,我想从库中获取相应的含义并继续在我的文件中处理案例。

任何想法如何在 VBA 中实现它?

【问题讨论】:

  • 如果我理解正确,您想在不同的集合上进行匹配。换句话说,SOME CASE 3 应该与 SOME MEANING 6 匹配,因为它们共享相同的唯一值集(ERTYFGHJGFOP)。这是正确的吗?
  • @ZevSpitz 这正是我想要做的 :) 问题是 GFOP 可以在第三列或第四列,例如 ex。情况 2,或者可以与含义 6 完全相同(这很简单)。
  • 如果您有 Excel 2016 或更高版本,使用 TEXTJOIN 函数,您可以使用工作表函数执行此操作。或者您可以在 vba 函数中使用这些工作表函数来做同样的事情。

标签: excel vba


【解决方案1】:

顺便说一句,您可以创建一个 VBA 函数,该函数将返回一个表示 the unique values 的字符串。

如果某些字符永远不会出现在值中,您可以用该字符分隔值(例如_):

Function GetUniqueValuesString(rng As Range) As String
    Dim rngValues() As Variant
    rngValues = rng.Value

    ' The following line requires a reference to Microsoft Scripting Runtime
    ' (via Tools -> References...)
    Dim dict As New Scripting.Dictionary

    'The function only parses the first row of the range
    Dim i As Integer
    For i = 1 To UBound(rngValues, 2)
        dict(rngValues(1, i)) = 1 ' 1 here is a dummy value
    Next

    GetUniqueValuesString = Join(dict.Keys, "_")
End Function

(如果每个值总是相同数量的字符,您可以简单地连接它们,无需任何分隔符。)

对水平单元格范围使用此函数:

=GetUniqeValuesString(A4:D4)

应该返回一个只有唯一值的字符串:

BGAA_TGHJ_WETY

如果您将此函数应用于库行和文件行,您应该能够匹配函数的返回值。


请注意,该函数有一些限制可能需要解决:

  • 它假定值的顺序相同。换句话说,BGAATGHJWETY 将解析为不同于 BGAAWETYTGHJ 的字符串。
  • 函数只加入第一行;其他行被忽略。

【讨论】:

  • 很抱歉错过了该信息,字符串将始终只包含四个字符。
  • 谢谢!我会试试看,让你知道结果如何:)
  • 它给了我最后一行代码 13 的错误,说类型不匹配:Join(temp, "_")。这个温度是从哪里来的?
  • @mrGott 对不起!已更新。
猜你喜欢
  • 2018-10-03
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多