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

解決済みの質問

Excel2003でVLookupは使用できない?

マクロなのですが、
Excel97で動作していたものをExcel2003で動かすとエラーが発生します。
エラー発生場所は、

KAZU = Application.VLookup("20061201", Range("範囲"), 2, True)

で、Application.VLookup(20061201, Range("範囲"), 2, True)の値を調べたら
エラー 2042が入っていました。
Excel2003ではVLookupが使用出来ないのでしょうか?

投稿日時 - 2007-01-23 16:35:42

QNo.2689765

すぐに回答ほしいです

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

補足。
VLookupでエラー値が返る時の分岐について

Sub WorksheetFunctionとの違い()
  Dim x As Variant
  
  x = Application.VLookup(1, [{1,2}], 2, 0)
  Debug.Print x
  x = Application.WorksheetFunction.VLookup(1, [{1,2}], 2, 0)
  Debug.Print x
  
  x = Application.VLookup(2, [{1,2}], 2, 0)
  Debug.Print x
  x = Application.WorksheetFunction.VLookup(2, [{1,2}], 2, 0) 'エラー
End Sub

Sub なのでエラー分岐方法が分かれる()
  Dim x As Variant
  
  x = Application.VLookup(2, [{1,2}], 2, 0)
  If IsError(x) Then MsgBox "error"
  
  x = Empty
  
  On Error Resume Next
  x = WorksheetFunction.VLookup(2, [{1,2}], 2, 0)
  On Error GoTo 0
  If IsEmpty(x) Then MsgBox "error"
End Sub

投稿日時 - 2007-01-23 23:10:23

ANo.4

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

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

回答(5)

ANo.5

こんばんは。

一応、私個人は、Application.VLookup という、Excel97 の書き方はしません。
別に、それで特別、根拠があるわけではないのですが、古い書き方は、なるべく避けています。変数のデータ型が雑なような気がしてくるからです。


Sub TestMarcoFormula()
Dim Kazu As String '←Variant でもよい。
'しかし、数値型は、0も値だからダメです。
Dim SearchWd As Variant '←Longでもよい。
 SearchWd = 20061201 '←なるべく、数式には直接入れない
 Kazu = "" '一旦、長さ0の文字列を入れます。Variant型は、Empty値。
 On Error Resume Next
  Kazu = WorksheetFunction.VLookup(SearchWd, Range("範囲"), 2, True)
 On Error GoTo 0
   
  If Kazu <> "" Then  '変数が更新されたか調べる
             'Variant型は、IsEmpty()
    MsgBox Kazu
  End If
End Sub


なお、「エラー2042」は、"#N/A" というエラー値です。
それから、Range("範囲") たぶん、名前登録だと思いますが、不安定になりがちですから、VBAの中で定義したほうがよいです。

Const 範囲 As String = "Sheet1!A1:B20"

として、
  Kazu = WorksheetFunction.VLookup(SearchWd, Range(範囲), 2, True) '""を取る

投稿日時 - 2007-01-24 02:25:41

ANo.3

(1)#1のご指摘が可能性が一番高いと思います。
(2)そのほかに、TRUE型でよいですか。ぴったりの値を探すのはFALSE型ですが。該当する値の範囲をさがすのが、TRUE型ですが?
(3)「範囲」の左端列と、第1引数の
”20061201"の数値か文字列かが合っていますか。
質問の例で下は20061201と数値、上は文字列になってます。
実態はどうなってますか。
(4))「範囲」の左端列と関数の第1引数が前後や途中スペースや半角・全角を含めて、思わぬ不統一がありませんか。
>Excel2003ではVLookup
まず変化はないでしょう。先日もバージョンのせいを疑った質問がありましたが、この習慣はよくないと思います。
基礎的な事項は97あたりから変わっていません。変わっている点も
有るので、むつかしいのでしょうが。

投稿日時 - 2007-01-23 22:34:12

ANo.2

こんにちは。
XL2003でも Application.VLookup は使えます。
>エラーが発生します
とは、エラーでコードが止まってしまうという意味ですね?
なんというエラーメッセージですか?

まず、確認すべき事2点あります。

1)KAZUという変数の型は何ですか?
Variant型でないと、Application.VLookupの結果が#N/Aを返す場合は、その答えを格納する事ができません。

2)そのコードは標準モジュールに書かれていますか?
それ以外、例えばシートモジュールなどに書かれている場合、
かつRange("範囲")が他シート範囲を名前定義している場合、Excel.Range("範囲")としなければいけません。



もし、エラー発生...というのが、変数KAZUにエラー値が格納されるという意味であれば、
計算結果が、一般関数でいうところの #N/A を返しているだけですので、検索値や範囲を再確認してみては。

投稿日時 - 2007-01-23 22:22:34

ANo.1

Application.WorksheetFunction.VLookup
では?

投稿日時 - 2007-01-23 17:51:28

あなたにオススメの質問