【发布时间】:2018-07-02 21:11:58
【问题描述】:
您好,我正在尝试修复我的代码以执行以下操作(在某些情况下)
excel 中有 2 列:P 列和 S 列。这两列都有数千行长。
P列都是多行文本字符串(产品描述) S列都是多行文本字符串(产品的cmets)
我需要编写一个 vba 函数,该函数将查看 P 列中的单元格,如果存在与 S 列中的值相关的匹配项,则返回精确的字符串匹配项。
示例:
使用正则表达式,我可以使用以下代码一次比较一行(P3 到 S3):
Public Function RxMatch( _
ByVal SourceString As String, _
ByVal Pattern As String, _
Seperator As String, _
Optional ByVal IgnoreCase As Boolean = True, _
Optional ByVal MultiLine As Boolean = True) As Variant
Dim arrWords() As String
arrWords = Split(SourceString, separator)
Dim oMatches As MatchCollection
For Each word In arrWords
With New RegExp
.MultiLine = MultiLine
.IgnoreCase = IgnoreCase
.Global = False
.Pattern = Pattern
Set oMatches = .Execute(SourceString)
If oMatches.Count > 0 Then
RxMatch = oMatches(0).Value
Else
RxMatch = "No match"
End If
End With
Next word
End Function
但是,我需要将 P3 与所有列 S 进行比较,以查看是否有任何描述匹配,而不是将 P3 与 S3 进行比较。有没有办法更新我提供的这段代码,以便它匹配整个 S 列而不是单元格到单元格?
【问题讨论】:
-
拥有尽可能多的条目,您可能很难找到有效的方法来执行此操作。嵌套的
foreach循环是最明显的方法,但它会很慢。 -
使用数组会快很多。
-
数组和指令?抱歉,我目前无法放大图片以正常查看数据。
-
VLOOKUP 对您有帮助吗?以我的经验,它比 VBA 更快。
-
您是否只是检查 S 列中的任何子字符串是否包含在 P 列中较长的字符串中?您的图片非常小,很难看到。
标签: regex vba excel string-matching