2017-08-29 84 views
0
比较两列更快的方法

所以我必须利用目前正在做这个循环的一些代码,它需要大约6分钟,运行...从2点不同的工作簿

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

另一个数据库包含2列:一个是数据的数字形式,而另一个被命名。如果数值在这个其他数据库的数值列,

我的数据库目前比较我的“名称”列当它找到一个匹配它改变了我的“名字”细胞到相应的名称单元格中的其他数据库相匹配。

有没有更快的方式做到这一点不是使用循环? 我不得不为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

是一个更快的方法是把一切都变成数据库表中 – jimmy8ball

+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 
+0

非常感谢!这使我的宏不少顺畅的操作,不再需要在6分钟一个更大的工具来做到这一个小部分:) –

+0

@DaleSwire欢迎您 –

+0

@DaleSwire如果你能提供更多的数据,可能将两个工作表的屏幕截图和需要的结果在 –

相关问题