こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAのエラーについて

いつも識者の皆様にはお世話になっております。
Excel VBAのことで質問させてください。

Range("i23").Value = Application.VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0)
というコードは通るのですが、
Range("i23").Value = Application.Left(VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0), 2)
というleft関数を追加したコードだと「sub または function が定義されていません」というエラーになってしまいます。

VBAを始めたばかりなのですが、何か根本的な勘違いをしていますでしょうか?
ちなみに
Range("i23").Value = Application.Left(Application.VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0), 2)
というコードも通りませんでした。

ご回答よろしくお願いいたします。

投稿日時 - 2012-04-07 14:25:44

QNo.7407739

困ってます

質問者が選んだベストアンサー

直接の間違い箇所のその1は、

間違い:
Vlookup(…

正しくは:
Application.Vlookup(…
です。

しばしば間違いやすい個所ですが、使いたい「Vlookup」の前に直接Application.を修飾して、つながりを明示してやらないとご覧になったエラーになります。




次の間違っている箇所その2は、
間違い:
Application.Left(…

正しくは:
Left(Application.Vlookup(…

なんでもかんでも「関数はApplication.関数名」のように勘違いしてはいけません。(その割にVlookupの前に忘れてた訳ですが)
そもそも「Application.Vlookup」のような省略(手抜き)記法を覚えてしまったのが間違いの始まりだったかもしれませんが、これは正確には
Application.Worksheetfunction.Vlookup(…
のように書きます。
Applicationの中にまずWorksheetFunctionという「ワークシート関数を特にマクロの中でも使う」ためのメンバがあり、それに含まれているVlookupという関数を使います、という意味です。

で、前振りが長くなりましたが、ExcelVBAで使うLeft関数は、WorksheetFunctionの中にはなくて、VBAオリジナルのLeft関数になります。つまりワークシート関数のLeft関数をVBAの中で使っているのではありません。そもそもWorksheetFunctionの中には、VBAで用意されているLeft関数などは、含まれていません。こういったことは、VBE画面で「オブジェクトブラウザ」と使い、WorksheetFunctionのメンバを確認してみることで判ります。


さらに。ちなみに
Application.Left
と書くと、これはLeft関数じゃなく、エクセルウィンドウの左端の位置を取得するという、全く意味の違う命令としてLeftが作動します。
こういうこともまた、オブジェクトブラウザで確認することができます。

投稿日時 - 2012-04-07 14:45:04

お礼

できました!ありがとうございます!

>そもそも「Application.Vlookup」のような省略(手抜き)記法を覚えてしまったのが間違いの始まりだったかもしれません

まったくそのとおりで、お恥ずかしい限りです。
きちんと構文の意味を考えて組むようにします!

投稿日時 - 2012-04-07 15:02:32

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Range("i23").Value = Application.Left(VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0), 2)
のVLookupに
Application.
を足せば良いのでは?

投稿日時 - 2012-04-07 14:32:59

あなたにオススメの質問