• 締切済み

EvaluateでVlookupを使いたい

マクロ初心者です。 Range("F3:F7").value = Evaluate("VLOOKUP(A3:A7,$I$9:$J1$4,2)") 件数や関数が多いので、Evaluateで時間短縮を考えています。 VLOOKUPのはじめのセルの結果が下のセルにコピーされてしまい、うまくいきません(>_<) どうしたらいいでしょうか?

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

こういうやり方もあるということで Range("F3:F7").Formula="=VLOOKUP(RC[-5],R9C9:R14C10,2)" Range("F3:F7").value=Range("F3:F7").value

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 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)
回答No.1

次ではダメなのか。 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

関連するQ&A