我有一张包含200列的Excel表格。现在行数是3500.所以我必须搜索一个字符串,如果它出现在每行的任何列中。现在为了让这个过程更加丰富,我正在寻找任何替代而不是循环技术。有没有这样的?
IntRow6 = 2
DataCount = 0
Do While objSheet6.Cells(IntRow6,1).Value <> ""
For DataCount = 0 to UBound(VMHArray)
IntClmn3 = 1
Do While 1 = 1
If objSheet6.Cells(IntRow6,IntClmn3).Value = VMHArray(DataCount) Then
objSheet6.Cells(IntRow6,IntClmn3+2).Value=objSheet6.Cells(IntRow6,IntClmn3+5).Value
Exit Do
End If
IntClmn3 = IntClmn3 + 1
Loop
Next
IntRow6 = IntRow6 + 1
Loop
上面花了很多时间,因此我正在寻找一个等效的VBScript代码,可以更快地搜索。
修改
ParentColmnCount=ParentColmnCount-1
IntRow6=2
DataCount=0
Do While objSheet6.Cells(IntRow6,1).Value <> ""
For DataCount=0 to UBound(VMHArray)
If objSheet6.Range(objSheet6.Cells(IntRow6,1),objSheet6.Cells(IntRow6,ParentColmnCount)).Find(VMHArray(DataCount)) <> Nothing Then
MsgBox("Hi")
End If
Next
IntRow6=IntRow6+1
Loop
我收到任何错误,说上面代码的Range行中出现“Object variable not set”错误。
的更新 的
我已根据您的建议更新了我的代码,并修改了变量声明,如下所示:
选项明确
Dim objExcel1,objWorkbook
Dim strPathExcel1
Dim objSheet6,objSheet3
Dim IntRow6,IntRow3
Dim IntClmn3
Dim DataCount,ParentColmnCount
Dim Falg
Dim TaskCounter
Dim r As Range Dim s As Variant
但是我又得到了错误:预期结束声明“在行中”Dim r As Range“
答案 0 :(得分:2)
签出Range.Find
(返回Range
个对象)。它比循环更快。
示例:
Sub Test()
Dim r As Range
Dim matched As Range
'Get the second row
Set r = Sheet1.Range("2:2")
Set matched = r.Find("myString")
'Do stuff with matched
End Sub
<强> UDPATE:强>
假设您使用CreateObject("Excel.Application")
,则Range
对象将出现(因为CreateObject
将返回包含Range
个对象和功能的Excel实例。< / p>
为了进一步证明,您已经使用Range
个对象(Cells
is a Range
object)循环遍历工作表。
<强>更新强>
这是一个更高级的例子。假设Sheet1
上的以下数据:
fred ethel ricky bobby 1 2 3 4
lucy myrtle fonzy rickie 1 2 3 4
joanie chachie donna patty 1 2 3 4
selma homer lisa bart 1 2 3 4
您可以像这样遍历范围:
Sub test()
Dim r As Range
Dim names(3) As String
Dim s As Variant
names(0) = "ethel"
names(1) = "fonzy"
names(2) = "patty"
names(3) = "selma"
For Each s In names
For Each r In Sheet1.Cells.CurrentRegion.Find(s)
r.Offset(0, 4).Value = r.Offset(0, 4).Value + 1000
Next r
Next s
End Sub
例行程序完成后,数据现在为:
fred ethel ricky bobby 1 1002 3 4
lucy myrtle fonzy rickie 1 2 1003 4
joanie chachie donna patty 1 2 3 1004
selma homer lisa bart 1001 2 3 4
<强>更新强> 我刚看到您对您的问题的评论(并编辑了您的问题以包含更新的代码)。
您在该行上收到“未设置对象变量”,因为您无法使用<>
与对象进行比较。将行更改为:
If Not objSheet6.Range(objSheet6.Cells(IntRow6,1),objSheet6.Cells(IntRow6,ParentColmnCount)).Find(VMHArray(DataCount)) Is Nothing Then