| |
こんにちは。私の環境では速く処理できたので、参考まで^ ^
Sub sample()
Dim a, d, di, x
Dim r As Range
Dim Dic As Object
Dim i As Long, j As Long
Const n As Long = 50000
Set r = ActiveCell
If r.Column > 3 And r.Row + n < 65537 Then
a = r.Offset(, -3).Resize(n, 2).Value
d = r.Resize(n).Value
ReDim x(1 To n, 1 To 1)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To n
Dic(a(i, 1)) = a(i, 2)
Next i
For Each di In d
j = j + 1
If Dic.exists(di) Then x(j, 1) = Dic.Item(di)
Next di
r.Offset(, 1).Resize(n).Value = x
Set Dic = Nothing
End If
Set r = Nothing
End Sub
Dictionaryは勉強中なので、変な使い方をしてるかもしれません。
それと、ActiveCellより上の行は検索対象にはいらないですけど、
そういう仕様でいいのですよね?
|
|