|
Findメソッドでの検索は遅いので、
こんな方法(辞書に検索データをリストしておく)を使うと
効率よくなります。
Sub Try1()
Dim i As Integer, k As Integer
Dim LstR1 As Long, LstR2 As Long
Dim WS1 As Worksheet, WS2 As Worksheet
Dim dic As Object
Dim v
Set dic = CreateObject("Scripting.Dictionary")
Set WS1 = ThisWorkbook.Worksheets(1)
Set WS2 = Workbooks.Open(ThisWorkbook.Path & "\Book2.xlsx")
'始めに Book1の現在のデータをDictionary(辞書)に登録しておく
With WS1
LstR1 = .Cells(.Rows.Count, 1).End(xlUp).Row
v = .Range("A1:A" & LstR1).Value
For k = 1 To UBound(v)
dic(v(k, 1)) = Empty
Next
End With
With WS2
LstR2 = .Cells(.Rows.Count, 1).End(xlUp).Row
v = .Range("A1:A" & LstR2).Value
For k = 1 To UBound(v)
'ws2のデータが辞書になかったら、転記する
If Not dic.Exists(v(k, 1)) Then
LstR1 = LstR1 + 1
WS1.Cells(LstR1, 1).Value = v(k, 1)
End If
Next
End With
End Sub
転記するデータをいったん配列に入れておき、
最後に一括して シートに転記するようにすれば、
もっと速く処理できますけど。
|
|