所以我有一些代码使用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
答案 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