重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

こんにちは。VlookupのVBAを作成しています。ただ、「アプリケーション定義またはオブジェクト定義のエラーです」とエラーが出てしまい、実行できません。
以下コードでおかしな部分をご指摘いただけませんでしょうか。

Sub sample
For i = 12 To Worksheets("Sheet2").Cells(Rows.count, "C").End(xlup).Row
Worksheets("Sheet2").Cells(i,13).value = Application.WorksheetFunction.Vlookup(Worksheets("Sheet2").Cells(i,3),Worksheets("Sheet1").Range(Cells(3,1),Cells(i-9,10)),10,False)
Next
End Sub

やりたいこととしましては、Sheet2の中のC列(12行目以降)の値と、Sheet1の中のA列(3行目以降)の値を照合し、照合した場合には、Sheet1のJ列(3行目以降)の値をSheet2の中のM列(12行目以降)へ挿入したいです。

よろしくお願いします。

A 回答 (1件)

こんにちは



>Worksheets("Sheet1").Range(Cells(3,1),Cells(i-9,10))
で、エラーになっていませんか?
Sheet1がアクティブな状態で実行すればエラーにはならないと思いますが、多分、そうではない状態で実行しているのではないかと想像します。
エラーの際は、イミディエイトウィンドウやウオッチウィンドウなどを利用して、何が原因かを調べるのも一つの方法です。

もしも上記が原因であるなら、理由は、Cells(3,1)やCells(i-9,10) のシートが明示されていないので、デフォルトでアクティブシートのセルが参照されるからで、これとRangeのシートが合致しておらず矛盾が生じているからです。
複数のシートにまたがる処理を行う場合は、シート名を明示する習慣をつけた方が宜しそうに思います。

また、いちいち「Worksheets("Sheet1")」のような記述をしていると、記述が長くなり可読性が落ちるので、変数に代入したり、あるいは、With構文を利用するなどするのも一法です。
    • good
    • 1
この回答へのお礼

助かりました!ありがとうございました

お礼日時:2021/06/08 16:42

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