• 締切済み

Worksheet Function使用時のエラー

お世話になります。 以下のようなコードをプログラム内にて使用しております。 flag1 = WorksheetFunction.VLookup(ticker, Sheets("r" & Mid(Sheets("InsampleData").Cells(2, 2), 1, 4)).Range("A1:A10000"), 1, False) ticker(例えば1332)がシート内のA列に存在するならばそれを返すようなコードで御座います。 存在しないならばエラー処理をしております。 同じticker(例えば1332)でも2度目のエラーが発生しますと、意図したようにエラー処理されず、プログラムが停止してしまいます(実行時エラー’1004’)。 関数内の引数が全く同じにも関わらず、一度目は意図したようにエラー処理され、2度目にはされない。。。一日考えまして、Webにてご相談させて頂いた方が良いと判断いたしました。 皆様のアドバイスを頂戴できれば非常に助かります。 因みに、WorksheetFunctionの初期化等は出来るのでしょうか? 宜しくお願い申し上げます。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

エラー処理ルーチン内で更にエラー制御しようとしていませんか? http://www.accessclub.jp/bbs5/0031/vba9642.html そのケースに該当しないようなら、検証できる最低限の再現コードを提示できますか? 部分的にではなく、一連の流れの中で他者も検証できれば回答がつくかもしれません。 以下余談で。 VLookupやMatch関数は、WorksheetFunctionクラスの関数ではなく Applicationクラスの関数として使うとエラー制御の必要がなく、比較的容易なコーディングが可能です。 Dim ticker As Long Dim flag1 As Long Dim x   As Variant ticker = 1332 flag1 = 0 x = Application.Match(ticker, Sheets("r" & Mid(Sheets("InsampleData").Cells(2, 2), 1, 4)).Range("A1:A10000"), 0) If IsNumeric(x) Then   flag1 = ticker End If や Dim ticker As Long Dim flag1 As Variant ticker = 1332 flag1 = Application.VLookup(ticker, Sheets("r" & Mid(Sheets("InsampleData").Cells(2, 2), 1, 4)).Range("A1:A10000"), 1, 0) If IsError(flag1) Then   flag1 = 0 End If 戻り値用にVariant型変数を用いるとエラー値も格納できるため、 戻り値を調べて処理分岐すれば良いです。

回答No.4

VLookup関数をVBAで使うことは感心しません。 理由はエラー発生時の対処が面倒だから。 まず、検索対象を整理しましょう。 AA=Sheets("InsampleData").Cells(2, 2).Value BB="r" & Left(AA,4) Sheets(BB).Select 検索値tigerが検索対象の中に存在するかどうか(何個存在するか)をチェックします。 C=Application.WorksheetFunction.CountIf(Range("A1:A10000"), tiger) このCの値に対して、If文を書きます。 If C>0 Then D=Application.WorksheetFunction.Match(tiger,Range("A1:A10000"), 0) flag1=Cells(D,2).Valeu End If Match関数は検索対象のうち、最上行の行番号を返しますので、利用にはご注意を。

vba-question
質問者

お礼

御回答、誠に有難うございます。 昨晩、私も色々と考えた挙句。。。上にご助言頂戴した方法にコード変更させて頂きました。 しかし、何が理由で、先の方法では不具合が発生してしまうのか、”いつかは”知ることが出来ればと 考えております。 同じ引数にも関わらず、一度目はエラー処理がなされ、そして、二度目は処理されない。。。 なにかがスタックしてしまっているように思われてなりません。 重ねて、皆様のご助言感謝いたします。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.3

VBAで WorksheetFunction.VLookup~ という記述をした場合、検索値が見つからなかった時に1004エラーとなるようです。 エラー処理をされているとのことですが、どのようなエラー処理なのでしょうか?

vba-question
質問者

補足

御返信有難うございます。 関数を呼び出すコードの前に、 On Error GoTo ErrHdl1 としております。 呼び出し後のコードには、 ErrHdl1: flag1=0 と処理しております。 どうぞ引き続き宜しくお願い申し上げます。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

#1です。 すみません勘違いでした。シートは指定されていますよね。先ほどの回答は無視してください。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

1回目と2回目でアクティブになっているシートが違うといったことはありませんか?

関連するQ&A