使用VBAmacros在Excel行中searchstring的精确匹配

如何在Excel中search某个特定行中的string? 我有一个长型variables的行索引。

Dim rowIndex As Long rowIndex = // some value being set here using some code. 

现在我需要检查行中是否存在特定的值,whoose索引是rowIndex。

如果匹配,我需要获取第一个匹配单元格的列索引。

我曾尝试使用匹配function,但我不知道如何传递rowIndexvariables来代替单元格范围。

 Dim colIndex As Long colIndex = Application.Match(colName, Range("B <my rowIndex here>: Z <my rowIndex here>"), 0) 

尝试这个:

 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用作variables名称,因为它们已经在Excel对象库中提及。

使用worksheet.find(工作表是您的工作表),并使用其范围对象的行范围。 您可以获取rangeobject,例如:worksheet.rows(rowIndex)

然后给它find所需的参数,它应该为你find罚款。 如果我记得正确,find返回默认情况下的第一场比赛。 我手边没有Excel,所以你必须查找自己,对不起

我build议不要使用for-loop,它比find的更脆弱,更老化。

没关系,我find了答案。

这将做的伎俩。

 Dim colIndex As Long colIndex = Application.Match(colName, Range(Cells(rowIndex, 1), Cells(rowIndex, 100)), 0) 

这不是你已经帮助自己的另一个代码, 但是让你看看在VBA中使用Excel函数时的性能

  • Match()对于较less数量的search来说速度更快,但是与大量数据进行比较不是这样。 在这种情况下,你可能会考虑一个variant array/dictionary/arrayList方法取决于如果你想sorting,你想重复或不。

  • Match上的error handling

PS:**在后面的说明,如果你想做pattern matching那么你可以考虑ScriptingObject **Regex