两个表格比较,提高效率
现在有两个表格A,B, A和B的第一列内容有相同,把A的第一列内容和B的第一列逐一比较,如果相同,则把A的第二列内容考到B的第二列,我现在用的For循环来做,代码大概如下,但是如果比较内容多的话,效率太低了,可能完成比较要用10多分钟甚至更长。
For i =1 to 3000
for j = 1 to 3000
if A.cells(i,1) = B.cells(j,1) then
B.cells(j,2)=A.cells(i,2)
endif
next
next
大概知道可能可以使用字典,不过不太会用字典,各位大虾能否给例子,或者提供一下其它思路。最好能个例子。谢谢, 急
[解决办法]
把A与B的数据导入到数据库中操作,一条更新语句就可以实现:
UPDATE B SET B.b2=A.a2 FROM B INNER JOIN A ON B.b1=A.a1
[解决办法]
用 Dictionary 对象来处理的方法:
Option Explicit
'在VBA编辑器菜单“工具”→“引用”中,引用:
' Microsoft Scripting Runtime
Private Sub CopyData()
'Dim A As Worksheet
'Dim B As Worksheet
Dim objDict As Dictionary
Dim i As Long, strTemp As String
'Set A = Sheet1
'Set B = Sheet2
Set objDict = New Dictionary
For i = 1 To 3000
strTemp = A.Cells(i, 1)
'If (Not objDict.Exists(strTemp)) Then objDict.Add strTemp, i
objDict.Add strTemp, i
Next
For i = 1 To 3000
strTemp = B.Cells(i, 1)
If objDict.Exists(strTemp) Then _
B.Cells(i, 2) = A.Cells(objDict.Item(strTemp), 2)
Next
objDict.RemoveAll
Set objDict = Nothing
End Sub
dim strArrA() as string,strArrB() as string
strarra()=A.range("A1:B3000") '一次性读入数组
strarrb()=b.range("A1:B3000")
redim strarrc(ubound(strarra)) '分配空间
outindex=-1
For i =0 to 2999
for j = 0 to 2999
if strarra(i,0) = strarrb(j,0) then
strarrb(i,1)=strarra(j,1)
endif
next
next
A.range("A1:B3000")=strarra() '一次性从数组写入EXCEL对象
B.range("A1:B3000")=strarrb()