- 締切済み
vlookupプロパティで実行時エラーが出る
vlookup関数をマクロで行いたいと思っており、ネットで調べながらコードを書いております。 違うシート間でうまくいったコードをコピーし、変数等を直して実行してみたところ1004の実行時エラーが出てしまいます。 ソースシートをデータの範囲元とし、シート内にあるI8から始まるデータについて、vlookupをしたいのですが、vlookupプロパティの実行時にエラーが出ます。 範囲指定も検索値についても値が入っており、何が問題かわかりかねており困っております。 ソースシート = "KW_All" 'ソースシートの範囲定義 ソース上 = 8 ソース左 = 5 ソース右 = 5 ソース下 = Sheets(ソースシート).Range(Sheets(ソースシート).Cells(8, 5), Sheets(ソースシート).Cells(8, 5)).End(xlDown).Row シート = "Keyword" 'keywordシートの範囲定義 上 = 3 左 = 1 右 = 9 下 = Worksheets(シート).Range(Worksheets(シート).Cells(上, 左), Worksheets(シート).Cells(上, 左)).End(xlDown).Row keyword数 = 下 - 上 + 1 Set 範囲 = Sheets(ソースシート).Range(Sheets(ソースシート).Cells(ソース上, ソース左), Sheets(ソースシート).Cells(ソース下, ソース右)) For i = 1 To keyword数 検索値 = Sheets(シート).Range("I" & 上 + i - 1) Range("J" & 上 + i - 1) = Application.WorksheetFunction.VLookup(検索値, 範囲, 1, False) Next どうぞご教授くださいますと幸いです。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mu2011
- ベストアンサー率38% (1910/4994)
NO1です。 Application.WorksheetFunction.VLookupの構文では検索値が見つからない場合、 このコードで実行エラーになりマクロは中断しますのでこれを回避する一例です。 wk = Application.VLookup(検索値, 範囲, 1, False) If IsError(wk) then wk = "Not Found" Range("J" & 上 + i - 1) = wk
- mt2008
- ベストアンサー率52% (885/1701)
もう一度、KeywordシートI3セル以降の値が、KW_ALLシートのE8以降にちゃんと存在するか確認してみてください。 存在が確認出来てもまだ1004エラーになるのでしたら、その時の検索値とセル範囲「範囲」の値を提示してみてください。 ・検索値が存在しない時の処理を入れましょう。 ・Vlookupの結果を貼り付けるシートが指定されて居ません。アクティブなシートに張り付くと思いますが良いのでしょうか。
- mu2011
- ベストアンサー率38% (1910/4994)
検索値範囲の開始はI8から始まるのではないでしょうか、コード上はI3から開始 されているのでI3が空セル、検索範囲にないデータの為、エラーとなっています。 因みにコードはもっとシンプルにした方がよい、変数などを多用せずシンプルにした 方が良いと思います。 又、変数名称もコメント替わりにするつもりなら意味のある変数名称した方がよいと思います。 一例です。 ソース下 = Sheets(ソースシート).Range(Sheets(ソースシート).Cells(8, 5), Sheets(ソースシート).Cells(8, 5)).End(xlDown).Row ↓ 範囲最終行 = Sheets(ソースシート).Range("E8").End(xlDown).Row