電子書籍の厳選無料作品が豊富!

こんにちは。Excel VBAで「worksheetFunctionクラスのVlookupプロパティを取得できません」というエラーが発生してしまっております。
以下構文のどこかおかしなところをご指摘いただけないでしょうか。よろしくお願いします。

For i = 2 To Workbooks("WWW.xlsm").Worksheets("XXX").Cells(Rows.Count,8).End(XlDown).Row

ActiveSheet.Cells(i,23).value = Application.WorksheetFunction.Vlookup(ActiveSheet.Cells(i,8),Workbooks("YYY.csv").Worksheets("ZZZ").Range("A2:C1000"),3,False)

CellsとRangeが混じっていると問題なのでしょうか。
VBA素人にもかかわらずコード修正を求められており、参っております。。
どなたか詳しい方、アドバイスをお願いします。。

A 回答 (3件)

No2です。



連投失礼。

No1様のご指摘にあるように
>Cells(Rows.Count,8).End(XlDown).Row
は、常にその列の最終行(=1048576行)を返しますので、2行目以降全ての行に渡ってループすることになっています。
(エラーにはなりませんが、現実的な処理としてははなはだ疑問の処理です)

その結果として、空白セルを検索値として検索していてLOOKUPでエラーが発生しているものと想像されます。
(ご質問文でのエラーが2行目都の説明だったので、見落としました)

No2の処置を行えばエラーは出なくなりますが、ループが列全体なので、列全体にエラー表示が表示されることになります。
No1様の回答にあるように、ループの範囲も見直してください。
    • good
    • 1

こんばんは



>「worksheetFunctionクラスのVlookupプロパティを取得できません」
>というエラーが発生してしまっております。
完全一致で検索していますので、恐らく、検索値に一致するものが見つからないということだと思います。
(シート関数の場合に、エラー表示されるのと同様です)

対処としては、Lookup関数を使う前に存在を確認する(CountifやFindで)か、あるいは、そのままに対してエラー処理を加えるなどでしょうか。

以下は、エラー処理を加える例です。
(検索値がない場合にどうするのか不明なので、適当にしてあります)

変数宣言をしておいて
Dim v As Variant

ご提示の2行目を以下に変更
On Error Resume Next
v = WorksheetFunction.Vlookup(ActiveSheet.Cells(i,8),Workbooks("YYY.csv").Worksheets("ZZZ").Range("A2:C1000"),3,False)
If Err.Number <> 0 Then v = "エラーだよ"
On Error GoTo 0
ActiveSheet.Cells(i,23).value = v

ではいかがでしょうか?


>CellsとRangeが混じっていると問題なのでしょうか。
>VBA素人にもかかわらずコード修正を求められており、参っております。
一度修正できたりすると、以後、もっと様々なことを求められることになると想像しますけれど、大丈夫なのでしょうか?
    • good
    • 2

こんばんは


明らかに問題を生じる箇所は
Rows.Count,8).End(XlDown).Row です
Rows.Count 一番下の行からXlDownは一番下の行です

Rows.Count, 8).End(xlUp).Rowとしてみてください

また、ActiveSheet.はWorkbooks("WWW.xlsm").Worksheets("XXX")を示しているように思いますので オブジェクト変数にセットした方が分かり易いのでは無いかと思います
更にVlookup関数で見つからなかった時の対策も必要と思います
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A