プロが教えるわが家の防犯対策術!

VLookupを使ったマクロで抽出したいと思っています。下記のマクロコードの設定ついて、Sheet1に検索するデーターがあり、A列~K列に2000件程あります。これのK列を検索してSheet3のA列の番号(Sheet1・Sheet3ともにA列に同じ形式の番号がある)を検索してJ列に結果を出したいのですが、うまくいきません。For i = 1 To SerchKey.Rows.Countの設定がおかしいのか。OutputRange(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 2, False)がエラーになってしまいうまくできません。設定をお教え願えませんか。よろしくお願い致します。

Sub Sample()

Dim SerchKey As Range '検索値
Dim SerchRange As Range '検索範囲
Dim OutputRange As Range '出力範囲
Dim i As Long

Set SerchKey = Worksheets("Sheet3").Range("A2:A2000")
Set SerchRange = Worksheets("Sheet1").Range("A2:J2000")
Set OutputRange = Worksheets("Sheet3").Range("J2:J2000")

Application.ScreenUpdating = False

For i = 1 To SerchKey.Rows.Count
OutputRange(i, 1) = WorksheetFunction.VLookup(SerchKey(i, 1), SerchRange, 2, False)
Next

Application.ScreenUpdating = True

End Sub

A 回答 (1件)

こんにちは



どのようなエラーなのか不明ですが、「VLookupのプロパティを取得できません」というものなら、単純に、関数の結果がエラー値になる場合と同じです。
 ・検索値が存在しない
 ・空白値を検索値としている
などが考えられます。
上記の場合であれば、事前にチェックしてエラー回避を行うか、エラー処理を付け加えるかでしょう。

あるいは、結果を表示するセルに関数式を設定して、固定値化する方法を取れば、エラー処理をしなくてもそのままの表示になります。
OutputRange.FormulaLocal = "=Vlookup(A2,Sheet1!A$2:B$2000,2,false)"
OutputRange.Value = OutputRange.Value
のような感じでしょうか。
(ループや変数定義も不要になります)

それ以外が原因の場合は、エラー発生行やエラーの内容などを明記しておいた方が、適切な回答を得られると思います。


なお、ご質問には関係ありませんが、VLookupの第三引数が2なので、検索範囲はA2:B2000でも十分なのではないでしょうか?
    • good
    • 2
この回答へのお礼

ありがとうございました。なんとかできました。お世話になりました。

お礼日時:2022/02/03 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!