在另一个工作表中搜索2个条件并返回单元格值

时间:2018-01-13 18:03:10

标签: excel vba excel-vba

我正在尝试将名称和日期从一个工作表与另一个工作表匹配,并从该工作表中返回相应的单元格值以填充列。

要填充的活动工作表有24000行,而且要匹配和复制的数据的工作表有14645.列是每个中的名称,日期,中断时间(一个中的名称是一个较短的字符串ID,因此使用{{ 1}}(例如“Willia”和“WilliamsA”)。

我的代码大约有200行并结束。不确定是崩溃还是错误。任何帮助表示赞赏。

InStr

1 个答案:

答案 0 :(得分:0)

您永远不会使用rcell,因此您的外部循环可以简单地为For j = 1 To 23999(或任何大数字)。你的主要问题是,在你的内循环中,你只移动到下一个要比较的单元格如果前一个匹配,尽管有时你会为外部的每次迭代多次这样做环。如果你实际上没有匹配一个单元格,那么对于外循环的剩余迭代,你只是不断尝试匹配不匹配的单元格 - 这是一个毫无意义的练习。

我相信以下内容将实现您的目标:

Sub matchnamedate()

    Application.ScreenUpdating = False

    Dim i As Long
    Dim rcell As Range
    Dim rrng As Range

    Set rrng = Range("T2:T24000")

    For Each rcell In rrng

        For i = 2 To 14645
            If InStr(1, Worksheets("Max Breaks by Day").Cells(i, 1).Text, rcell.Offset(0, -2).Text) > 0 And _
               Worksheets("Max Breaks by Day").Cells(i, 2) = rcell.Offset(0, -1).Value Then

                rcell.Value = Worksheets("Max Breaks by Day").Cells(i, 3).Value
                'Exit if a match has been found
                Exit For
            End If
        Next i

    Next rcell

    Application.ScreenUpdating = True
End Sub