使用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
。