更快速地比较来自2个不同工作簿的两列的方法

时间:2017-08-29 10:28:53

标签: vba excel-vba excel

所以我有一些代码使用for循环当前正在执行此操作,大约需要6分钟才能运行...

我有很多工作表显示具有不同数据的相同列。 一列以命名形式或数字形式出现(取决于用户如何将其输入完全独立的数据库)。

另一个数据库包含2列:一列是数据的数字形式,另一列是名称。

我的数据库目前比较我的“名称”列(如果数字与此另一个数据库中的数字列),当它找到匹配时,它会更改我的“名称”单元格以匹配其他数据库中的相应名称单元格。

有没有比使用for循环更快的方法呢? 我必须为不同的工作表复制代码大约12次才能执行相同的任务。

如前所述,总体来说,所有12个人都需要大约6分钟

Sub 6mincode()

Workbooks("1").Activate

N = Workbooks("1").Sheets("Data").Cells(Rows.Count, "B").End(xlUp).Row
N2 = Workbooks("2").Sheets("Data Sheet").Cells(Rows.Count, "B").End(xlUp).Row

For I = 2 To N
    If (WorksheetFunction.IsNumber(Sheets("Data").Cells(I, "B").Value)) = True Then
        For zz = 8 To N2
            If StrComp(Sheets("Data").Cells(I, "B").Value, Workbooks("2").Sheets("Data Sheet").Cells(zz, "B").Value) = 0 Then
                Workbooks("1").Sheets("Data").Cells(I, "B").Value = Workbooks("2").Sheets("Data Sheet").Cells(zz, "C").Value
            End If
         Next zz
    End If
Next I

End Sub

1 个答案:

答案 0 :(得分:1)

您可以保存第二个循环并使用Application.Match代替它,这将为您节省大量时间。

请参阅下面的代码,代码注释中的解释:

Option Explicit

Sub Sixmincode()

Dim N As Long, N2 As Long, I As Long
Dim Rng As Range, MatchRow

With Workbooks("1").Sheets("Data")
    N = .Cells(.Rows.Count, "B").End(xlUp).Row
End With

With Workbooks("2").Sheets("Data Sheet")
    N2 = .Cells(.Rows.Count, "B").End(xlUp).Row ' get last row with data in column B

    ' set the Range to Match with
    Set Rng = .Range("B8:B" & N2)
End With

With Workbooks("1").Sheets("Data")
    For I = 2 To N
        If IsNumeric(.Cells(I, "B").Value) Then ' use IsNumeric
            ' use Application.Match, if Not IsError means there is a match found in the second workbook
            If Not IsError(Application.Match(.Cells(I, "B").Value, Rng, 0)) Then
                MatchRow = Application.Match(.Cells(I, "B").Value, Rng, 0)
                .Cells(I, "B").Value = Workbooks("2").Sheets("Data Sheet").Cells(MatchRow, "C").Value
            End If
        End If
    Next I
End With

End Sub