| 
    
     |  | そーいう処理なら、VLOOKUP関数とかFunctinプロシージャを使わなくても、普通の マクロ(Subプロシージャ)でやった方が軽いし簡単です。コードは↓こんな感じです。
 
 Sub Get_MyData()
 Dim Sh1 As Worksheet, Sh2 As Worksheet
 Dim C As Range
 Dim Rnm As Long
 
 Set Sh1 = Worksheets("Sheet1")
 Set Sh2 = Worksheets("Sheet2")
 Sh1.Range("B:D, AA:AA").ClearContents
 With Sh1.Range("A2", Sh1.Range("A65536").End(xlUp)).Offset(, 26)
 .Formula = _
 "=IF(ISNA(MATCH($A2,Sheet2!$A:$A,0)),FALSE,MATCH($A2,Sheet2!$A:$A,0))"
 On Error Resume Next
 Intersect(.SpecialCells(3, 4).EntireRow, Sh1.Range("D:D")) _
 .Value = "該当なし !"
 On Error GoTo 0: On Error GoTo ELine
 For Each C In .SpecialCells(3, 1)
 Rnm = C.Value
 C.Offset(, -25).Resize(, 3).Value = _
 Sh2.Range(Sh2.Cells(Rnm, 2), Sh2.Cells(Rnm, 4)).Value
 Next
 ELine:
 .ClearContents
 End With
 Set Sh1 = Nothing: Set Sh2 = Nothing
 End Sub
 
 * Sheet1 の1行目は項目という前提にしていますが、もしデータが入力されて
 いるのなら
 
 With Sh1.Range("A1", Sh1.Range("A65536").End(xlUp)).Offset(, 26)
 .Formula = _
 "=IF(ISNA(MATCH($A1,Sheet2!$A:$A,0)),FALSE,MATCH($A1,Sheet2!$A:$A,0))"
 
 というように修正して下さい。
 なおご覧のとおり、このコードは数式をセルに埋めて判定する形になってますが、
 MATCH関数はVLOOKUP関数に比べて軽いので、データ数が増えるほど差が出るはず
 です。しかも VLOOKUPなら B〜D列の全てのセルに入力する必要があるため、
 なおさら重くなる、と判断しています。ま、普通のマクロにするなら数式を使った
 コードにしなくても出来るのですが、そのへんは微妙な問題で、数式による判定も
 適切に行えば速度が期待できるため、あえてこのようなコードを組んでみた
 というわけです。
 
 
 |  |