- 締切済み
EvaluateでVlookupを使いたい
マクロ初心者です。 Range("F3:F7").value = Evaluate("VLOOKUP(A3:A7,$I$9:$J1$4,2)") 件数や関数が多いので、Evaluateで時間短縮を考えています。 VLOOKUPのはじめのセルの結果が下のセルにコピーされてしまい、うまくいきません(>_<) どうしたらいいでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- rivoisu
- ベストアンサー率36% (97/264)
こういうやり方もあるということで Range("F3:F7").Formula="=VLOOKUP(RC[-5],R9C9:R14C10,2)" Range("F3:F7").value=Range("F3:F7").value
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Range("F3:F7").value = Evaluate("VLOOKUP(A3:A7,$I$9:$J1$4,2)") そもそも、VLOOKUP(A3:A7,$I$9:$J1$4,2) こういう数式ができるのですか? VLOOKUPの第一引き数は、1つだけだったはずですし、返す値も、1つだったはずです。 Evaluate を使えば、オブジェクトを通すので、その分、遅くなるはずです。 あえて、VlookUp を使うなら、以下のようになります。多少でも、速度を上げるためには、必ず、前もって範囲を変数に置くことですが、VlookUp自体が、遅いはずです。あまり、VBAでは、このようなスタイルにしません。 '------------------------------------------- Sub Test1R() Dim ret As Variant Dim i As Long Dim c As Variant Dim Ar() As Variant Dim myData1 As Range Dim myData2 As Range '------------------------------------------- Set myData1 = Range("A3:A7") '検索値 Set myData2 = Range("I9:J14") '検索範囲 '------------------------------------------- For Each c In myData1 ret = Application.VLookup(c.Value, myData2, 2) ReDim Preserve Ar(i) If IsError(ret) Then Ar(i) = "" Else Ar(i) = ret End If i = i + 1 Next c If Not IsEmpty(ret) Then Range("F3").Resize(UBound(Ar) + 1).Value = Application.Transpose(Ar) End If End Sub '-------------------------------------------
- okormazd
- ベストアンサー率50% (1224/2412)
次ではダメなのか。 Range("F3:F7").Value = Application.VLookup(Range("A3:A7"), Range("$I$9:$J$14"), 2) どうしてもEvaluateを使いたいなら、 forで回すとか。 For i = 0 To 4 Range("F3").Offset(i, 0).Value = Evaluate("VLookup(A" & i + 3 & ", $I$9:$J$14, 2)") Next