|
▼naoko さん:
>また、関数かませるとすっごく重くなるのでダメですね。
いえいえ、提案しているのは、最終的には式は残らず、かつ
【すごく軽い】処理方式です。
ただ、アップされたコード、B列処理ですけど、コメント内に
>置換されては困る列もあるので、一気には無理だとわかりました。
とあるので、対象列は、複数列なんだと思われます。
まぁ、それならそれで、その列に対してループ処理をかければいいのですが、
以下のコードは B列のみ対象。 ためしにデータをマッチするもの中心に
3000件で動かしますと、私の環境で 0.05秒ぐらいの処理ですね。
条件として List というシートに置き換え表を準備しておきます。
1行目から A列が
クリニック
ケアミックス病院
回復期病院
等
B列に
8
7
4
等
(A列の値昇順にしてください)
作業列を使っています。コードでは C列にしていますが、どの列でもOKです。
Sub Sample()
Dim t As Double
t = Timer
Application.ScreenUpdating = False
With Sheets("Sheet1")
With .Range("B1", .Range("B" & Rows.Count).End(xlUp)).Offset(, 1)
.Formula = "=IFERROR(IF(INDEX(List!A:A,MATCH(B1,List!A:A))=B1,VLOOKUP(B1,List!A:B,2),B1),B1)"
.Offset(, -1).Value = .Value
.ClearContents
End With
End With
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub
|
|