Vbscript Excel工作表行的匹配字符串的列号
我编写了一个代码来搜索一个数组变量,如果它出现在工作表的每一行中。现在,当找到匹配项时,我需要知道列号是什么,在哪里找到了搜索字符串。你知道如何用vb脚本实现吗Vbscript Excel工作表行的匹配字符串的列号,vbscript,Vbscript,我编写了一个代码来搜索一个数组变量,如果它出现在工作表的每一行中。现在,当找到匹配项时,我需要知道列号是什么,在哪里找到了搜索字符串。你知道如何用vb脚本实现吗 ParentColmnCount=ParentColmnCount-1 IntRow6=2 DataCount=0 Do While objSheet6.Cells(IntRow6,1).Value <> "" For DataCount=0 to UBound(VMHArray) If Not objShe
ParentColmnCount=ParentColmnCount-1
IntRow6=2
DataCount=0
Do While objSheet6.Cells(IntRow6,1).Value <> ""
For DataCount=0 to UBound(VMHArray)
If Not objSheet6.Range(objSheet6.Cells(IntRow6,1),objSheet6.Cells(IntRow6,ParentColmnCount)).Find(VMHArray(DataCount)) Is Nothing Then
MsgBox(objSheet6.Range(objSheet6.Cells(IntRow6,1),objSheet6.Cells(IntRow6,ParentColmnCount)).Find(VMHArray(DataCount)).Columns)
End If
Next
IntRow6=IntRow6+1
Loop
知道为什么吗
感谢演示脚本演示如何使用。查找:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sFSpec : sFSpec = oFS.BuildPath(oFS.GetAbsolutePathname("..\xls"), "13763603.xls")
Dim oXls : Set oXls = CreateObject("Excel.Application")
Dim oWb : Set oWb = oXls.Workbooks.Open(sFSpec)
Dim oWs : Set oWs = oWb.Worksheets(2)
Dim rSearch, rFound, adrFirst
Set rSearch = oWs.Cells(1, 1).EntireRow
Set rFound = rSearch.Find("b1")
WScript.Echo 1, "TypeName(rFound):", TypeName(rFound), rFound.Row, rFound.Column
Set rSearch = oWs.Range(oWs.Cells(1, 1), oWs.Cells(5, 3))
Set rFound = rSearch.Find("nix")
WScript.Echo 2, "TypeName(rFound):", TypeName(rFound)
Set rFound = rSearch.Find("alpha")
If Not rFound Is Nothing Then
adrFirst = rFound.Address
Do
WScript.Echo 3, "TypeName(rFound):", TypeName(rFound), rFound.Row, rFound.Column
Set rFound = rSearch.FindNext(rFound)
Loop Until rFound.Address = adrFirst
End If
oWb.Close
oXls.Quit
此工作表的输出:
:
更新:
从输出中可以看出
----------------------
4 1 TypeName(rFound): Range 1 3
Wahr rFound.Address <> adrFirst
Falsch rFound Is Nothing
Wahr Not rFound Is Nothing
Wahr rFound.Address <> adrFirst And Not rFound Is Nothing
用一些复杂的东西,更不用说:像傻瓜一样
Loop Until rFound.Address <> adrFirst And Not rFound Is Nothing
循环直到rFound。地址adrFirst和Not rFound都是空的
到底是什么让你这么做的?到目前为止,我从你那里得到了极好的帮助。。。谢谢Ekkehard我的新问题,有更快的代码吗?根据我的研究,我认为FindNext()方法在一次找到同一行时搜索相同的值(如果该值在同一行中存在或不存在)。因此,如果第二次出现在同一行中,则循环将继续,否则rFound.Address和adrFirst将相同,循环条件“rFound.Address adrFirst”应该打破循环以进一步迭代。但在我的例子中,它并没有发生,它落入了永久循环,正如我在更新的代码中提到的那样,输出证明了这一点。那么原因是什么?@user1878162-你的假设是错误的;请仔细研究我的更新,看看你为什么被误导的循环条件迫使立即退出:“不被发现没有什么”总是正确的,“rdab.AdrdAdReST”是真的(因为找到第二个匹配),现在考虑“到”和“在”之间的区别。现在我明白了。谢谢你的帮助!
1 TypeName(rFound): Range 1 2
2 TypeName(rFound): Nothing
3 TypeName(rFound): Range 1 3
3 TypeName(rFound): Range 2 1
3 TypeName(rFound): Range 4 2
3 TypeName(rFound): Range 5 3
----------------------
4 1 TypeName(rFound): Range 1 3
Wahr rFound.Address <> adrFirst
Falsch rFound Is Nothing
Wahr Not rFound Is Nothing
Wahr rFound.Address <> adrFirst And Not rFound Is Nothing
WScript.Echo "----------------------"
Dim nCnt : nCnt = 0
Set rFound = rSearch.Find("alpha")
If Not rFound Is Nothing Then
adrFirst = rFound.Address
Do
nCnt = nCnt + 1
If nCnt > 9 Then WScript.Echo "Aborting" : Exit Do : End If
WScript.Echo 4, nCnt, "TypeName(rFound):", TypeName(rFound), rFound.Row, rFound.Column
Set rFound = rSearch.FindNext(rFound)
WScript.Echo CStr(rFound.Address <> adrFirst), vbTab, "rFound.Address <> adrFirst"
WScript.Echo CStr(rFound Is Nothing), vbTab, "rFound Is Nothing"
WScript.Echo CStr(Not rFound Is Nothing), vbTab, "Not rFound Is Nothing"
WScript.Echo CStr(rFound.Address <> adrFirst And Not rFound Is Nothing), vbTab, "rFound.Address <> adrFirst And Not rFound Is Nothing"
WScript.Echo
Loop Until rFound.Address <> adrFirst And Not rFound Is Nothing
End If
Loop Until rFound.Address = adrFirst
Loop Until rFound.Address <> adrFirst And Not rFound Is Nothing