使用 VBA 宏在 excel 行中搜索字符串的完全匹配
Posted
技术标签:
【中文标题】使用 VBA 宏在 excel 行中搜索字符串的完全匹配【英文标题】:Search for exact match of string in excel row using VBA Macro 【发布时间】:2013-01-08 10:32:04 【问题描述】:如何在excel的某一行中搜索字符串?我在长类型变量中有行索引。
Dim rowIndex As Long
rowIndex = // some value being set here using some code.
现在我需要检查行中是否存在特定值,其索引是 rowIndex。
如果有匹配,我需要获取第一个匹配单元格的列索引。
我尝试过使用 Match 函数,但我不知道如何传递 rowIndex 变量来代替单元格范围。
Dim colIndex As Long
colIndex = Application.Match(colName, Range("B <my rowIndex here>: Z <my rowIndex here>"), 0)
【问题讨论】:
【参考方案1】:试试这个:
Sub GetColumns()
Dim lnRow As Long, lnCol As Long
lnRow = 3 'For testing
lnCol = Sheet1.Cells(lnRow, 1).EntireRow.Find(What:="sds", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
End Sub
最好不要使用 colIndex 和 rowIndex 作为变量名,因为它们已在 Excel 对象库中提及。
【讨论】:
我听说使用 Find 通常比 Match 慢。不过,我正在寻找匹配示例。 您需要将xlPart
替换为xlWhole
才能找到精确匹配项
效果很好。谢谢。
当文本在“lnRow”中时工作正常,但是在搜索可能包含或不包含数据的行时出现运行时错误 91。
如果你不知道某物是否在行中,会造成相当大的麻烦。【参考方案2】:
这不是您已经帮助自己的另一个代码;但是让您看看在 VBA 中使用 Excel 函数时的性能。
Match()
is faster for smaller number of search, but it isn't when it compared to a large number of data. And in that instance you may consider a variant array/dictionary/arrayList
approach depending on if you want to sort, you want to have duplicates or not..
Error handling on Match
PS:
**在后面的说明中,如果您想使用pattern matching
,那么您可以考虑使用ScriptingObject **Regex
。
【讨论】:
【参考方案3】:使用 worksheet.find(工作表是您的工作表)并将行范围用作其范围对象。 您可以获取 rangeobject,例如:worksheet.rows(rowIndex) 作为示例
然后给出它应该为您找到它的所需参数。 如果我没记错的话, find 默认返回第一个匹配项。 我手头没有Excel,你得自己找找,不好意思
我建议不要使用 for 循环,因为它比 find 更脆弱且老化更慢。
【讨论】:
【参考方案4】:没关系,我找到了答案。
这样就可以了。
Dim colIndex As Long
colIndex = Application.Match(colName, Range(Cells(rowIndex, 1), Cells(rowIndex, 100)), 0)
【讨论】:
以上是关于使用 VBA 宏在 excel 行中搜索字符串的完全匹配的主要内容,如果未能解决你的问题,请参考以下文章
使用 Excel VBA 宏在 Word 中查找和替换页脚文本