0

我有一个有 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,ParentColmnCo‌​unt)).Find(VMHArray(DataCount)) <> Nothing Then
            MsgBox("Hi")
        End If
    Next
    IntRow6=IntRow6+1
Loop

我在上面代码的 Range 行收到任何错误消息,即“未设置对象变量”错误。

更新

我已根据您的建议更新了我的代码,并修改了变量的声明如下:

选项显式

暗淡 objExcel1,objWorkbook

暗淡 strPathExcel1

暗淡 objSheet6,objSheet3

调暗 IntRow6,IntRow3

昏暗的 IntClmn3

Dim DataCount,ParentColmnCount

昏暗的法尔格

暗淡任务计数器

Dim r As Range Dim s As Variant

但我再次收到错误:“Dim r As Range”行中的预期语句结束

4

1 回答 1

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 实例)。

Range为了进一步证明,您已经使用对象(Cellsis a Rangeobject )遍历工作表。

更新:

这是一个更高级的示例。假设在 on 中有以下数据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,ParentColmnCo‌​unt)).Find(VMHArray(DataCount)) Is Nothing Then
于 2012-12-09T15:31:01.800 回答