アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

どうぞご教授くださいますと幸いです。

A 回答 (3件)

検索値範囲の開始はI8から始まるのではないでしょうか、コード上はI3から開始


されているのでI3が空セル、検索範囲にないデータの為、エラーとなっています。

因みにコードはもっとシンプルにした方がよい、変数などを多用せずシンプルにした
方が良いと思います。
又、変数名称もコメント替わりにするつもりなら意味のある変数名称した方がよいと思います。

一例です。
ソース下 = Sheets(ソースシート).Range(Sheets(ソースシート).Cells(8, 5), Sheets(ソースシート).Cells(8, 5)).End(xlDown).Row
 ↓
範囲最終行 = Sheets(ソースシート).Range("E8").End(xlDown).Row
    • good
    • 0

もう一度、KeywordシートI3セル以降の値が、KW_ALLシートのE8以降にちゃんと存在するか確認してみてください。


存在が確認出来てもまだ1004エラーになるのでしたら、その時の検索値とセル範囲「範囲」の値を提示してみてください。


・検索値が存在しない時の処理を入れましょう。
・Vlookupの結果を貼り付けるシートが指定されて居ません。アクティブなシートに張り付くと思いますが良いのでしょうか。
    • good
    • 0

NO1です。


Application.WorksheetFunction.VLookupの構文では検索値が見つからない場合、
このコードで実行エラーになりマクロは中断しますのでこれを回避する一例です。

wk = Application.VLookup(検索値, 範囲, 1, False)
If IsError(wk) then wk = "Not Found"
Range("J" & 上 + i - 1) = wk
    • good
    • 1

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