|
こんにちは。
>やりたいのは、B列から取得する値がある場合のみ、E列に書き込んでいくこと
>です。(私が最初に示したコードのとおりです。)
なるほど、既に値があったのですね。
であれば、最初にxに値を取り込んであげればいいですけど。
B列から取得する値があって、E列にも値がある場合は上書きでいいのですか?
上書きしないなら And IsEmpty(x(j, 1)) の判断を入れればいいですけど、
とりあえず上書きなら
Sub sample()
Dim a, d, di, x
Dim r As Range
Dim Dic As Object
Dim i As Long, j As Long
Const c As Long = -3
Set r = Range("d1") 'ActiveCell
With r.Offset(, c)
a = Range(.Cells, .End(xlDown).Offset(, 1)).Value
End With
With Range(r, r.End(xlDown))
d = .Value
With .Offset(, 1)
x = .Value
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(d)
If Not Dic.exists(a(i, 1)) Then 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
.ClearContents
.Value = x
End With
End With
Set Dic = Nothing
Set r = Nothing
End Sub
|
|