- ベストアンサー
エクセルVBAでVLookupを使って値を転記する
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! わざわざVBAでやるメリットはないように思えますが・・・ Excel2003 というコトなので Sheet1のB2セルに =IF(COUNTIF(Sheet2!A:A,A2),VLOOKUP(A2,Sheet2!A:B,2,0),"") という数式を入れB2セルのフィルハンドルでダブルクリック! これで完了だと思います。 どうしてもVBAでやりたい場合、一例です。 ワークシート関数をそのまま使用するのが一番簡単だと思います。 Sub Sample1() Dim lastRow As Long, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row With Range(.Cells(2, "B"), .Cells(lastRow, "B")) .Formula = "=IF(COUNTIF(Sheet2!A:A,A2),VLOOKUP(A2,Sheet2!A:B,2,False),"""")" .Value = .Value End With End With End Sub 別の方法としては、いかにもVBAらしくやると Sub Sample2() Dim i As Long, c As Range, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row Set c = wS.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then Cells(i, "B") = wS.Cells(c.Row, "B") End If Next i End With End Sub こんな感じでしょうか。 ※ Sample2はループさせていますので、データ量が多い場合は Sample1の方が速いと思います。m(_ _)m
その他の回答 (1)
- mar00
- ベストアンサー率36% (158/430)
VBAにしなくとも普通に関数でよいのではないかと。 Sub Macro1() Dim myRow As Long myRow = Cells(Rows.Count, "A").End(xlUp).Row Range(Range("B2"), Range("B" & myRow)).Formula = _ "=IF(COUNTIF(Sheet2!A:A,A2),VLOOKUP(A2,Sheet2!A:B,2,FALSE),"""")" End Sub
お礼
回答ありがとうございます。 思っていたことが出来るようになり、 大変満足しております。 お手数おかけいたしました。
お礼
早々の回答ありがとうございました。 早速試してみたいと思います。 2つも提案してくださって感謝いたします。