使用 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 行中搜索字符串的完全匹配的主要内容,如果未能解决你的问题,请参考以下文章

VBA 宏在保持顺序的同时查找特定字符串

如何使用 VBA 宏在 Excel 表中查找条件累积和

使用 Excel VBA 宏在 Word 中查找和替换页脚文本

Excel VBA 一段宏在64位系统中运行会报错,32位系统运行完美,求解决方案?

使用 VBA 宏在 Word 中水平对齐(分布)图像

带高亮显示的动态搜索 - Excel VBA