• ベストアンサー

ExcelのVBAに詳しい方、教えて下さい。

VBAの中でVLOOKUP関数を使っています。 対象となるリストの中に、検索値に相当する文字列が無かったとき、 「WorksheetクラスのVlookupプロパティを取得できません。」という表示がでて、演算が止まってしまいます。 excel単体でVlookupを使ったときのように、検索値が無い場合は「N/A#」と表示させるか、 他の表示をさせて演算を継続させたいのですが、 どのようにしたら良いでしょうか? ご存じの方、教えて下さい。

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

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

こんにちは、 >連続してエラーが出た場合は、この方式ではダメなのでしょうか…。 連続していても、大丈夫の様ですが、 On Error GoToの使い方が間違っては いませんか エラー処理した後、 エラーからResume Next で、復活させないと駄目ですよ。 サンプルを書いておきます Public Sub ff() Dim smoji As String Dim hani As Range Dim keka As Variant On Error GoTo trap 'エラーする文字 smoji = "x" Set hani = Sheet1.Range("A1:B8") keka = WorksheetFunction.VLookup(smoji, hani, 2, False) Debug.Print keka 'エラーする文字 smoji = "x" Set hani = Sheet1.Range("A1:B8") keka = WorksheetFunction.VLookup(smoji, hani, 2, False) Debug.Print keka 'エラーしない文字 smoji = "e" Set hani = Sheet1.Range("A1:B8") keka = WorksheetFunction.VLookup(smoji, hani, 2, False) Debug.Print keka Exit Sub trap: keka = "erro" Resume Next End Sub 実行結果 call ff erro erro 5

FUJIKUN_45
質問者

お礼

有り難うございますm(_ _)m サンプルコードまで書いて頂きすいませんm(_ _)mm(_ _)m 無事解決致しました。m(_ _)mm(_ _)mm(_ _)m

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

.VLookup() よりも前に、 On Error Goto Next と記載すると、それ以降に発生するエラーを無視して実行可能になります。 そして、.VLookup() 実行後にエラー番号(Err.Number)を取得すれば、エラーの内容を検知して対応する処理を実行出来ます。 エラートラップと言います。 http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page21.htm

FUJIKUN_45
質問者

お礼

回答有り難うございます。 On Error Goto… を使ってみました。 エラーが1回の時はOKなのですが、2回連続してエラーが出ると 止まってしまうようです…。 教えていただいたサイトを確認してみます。

  • gif317
  • ベストアンサー率32% (71/216)
回答No.1

これだけではなんとも言えないですが、VLOOKUPを使っていると子だけでもコードを書いてもらわないと答えようが無いような気がします。あと、このサイトよりもこちらの方がいいかもしれません。

参考URL:
http://www2.moug.net/bbs/exvba/
FUJIKUN_45
質問者

補足

回答有り難うございます。 つたないコードですが、以下のように作っています。 '---DATA1に有ってDATA2に無いもの--- COUNT = 0 Do Until COUNT = 7500 Do Until COUNT = 7500 Windows(myname).Activate Sheets("Sheet2").Select COUNT = COUNT + 1 CHECK = Sheets("DATA2").Cells(COUNT, 1) If CHECK = "" Then Exit Do Else End If On Error GoTo TRAPa ANS = _ WorksheetFunction.VLookup(CHECK, Sheets("DATA1").Range("A1:E7500"), 5, False) Worksheets("Sheet2").Cells(COUNT, 1) = ANS Loop TRAPa: If Sheets("DATA2").Cells(COUNT, 1) = "" Then Exit Do Else End If ANS = "×" Worksheets("Sheet2").Cells(COUNT, 1) = ANS Loop '----------------------- 以上です。 ここで、COUNT値が1382、1383の時に、連続して検索値が無い場合、 1382に対しては"×"が表示されるのですが、1383の時に 「WorksheetクラスのVlookupプロパティを取得できません。」 のメッセージが出て止まってしまうのです。 連続してエラーが出た場合は、この方式ではダメなのでしょうか…。

関連するQ&A