- ベストアンサー
Excel2003でVLookupは使用できない?
マクロなのですが、 Excel97で動作していたものをExcel2003で動かすとエラーが発生します。 エラー発生場所は、 KAZU = Application.VLookup("20061201", Range("範囲"), 2, True) で、Application.VLookup(20061201, Range("範囲"), 2, True)の値を調べたら エラー 2042が入っていました。 Excel2003ではVLookupが使用出来ないのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
補足。 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
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 一応、私個人は、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) '""を取る
- imogasi
- ベストアンサー率27% (4737/17069)
(1)#1のご指摘が可能性が一番高いと思います。 (2)そのほかに、TRUE型でよいですか。ぴったりの値を探すのはFALSE型ですが。該当する値の範囲をさがすのが、TRUE型ですが? (3)「範囲」の左端列と、第1引数の ”20061201"の数値か文字列かが合っていますか。 質問の例で下は20061201と数値、上は文字列になってます。 実態はどうなってますか。 (4))「範囲」の左端列と関数の第1引数が前後や途中スペースや半角・全角を含めて、思わぬ不統一がありませんか。 >Excel2003ではVLookup まず変化はないでしょう。先日もバージョンのせいを疑った質問がありましたが、この習慣はよくないと思います。 基礎的な事項は97あたりから変わっていません。変わっている点も 有るので、むつかしいのでしょうが。
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 XL2003でも Application.VLookup は使えます。 >エラーが発生します とは、エラーでコードが止まってしまうという意味ですね? なんというエラーメッセージですか? まず、確認すべき事2点あります。 1)KAZUという変数の型は何ですか? Variant型でないと、Application.VLookupの結果が#N/Aを返す場合は、その答えを格納する事ができません。 2)そのコードは標準モジュールに書かれていますか? それ以外、例えばシートモジュールなどに書かれている場合、 かつRange("範囲")が他シート範囲を名前定義している場合、Excel.Range("範囲")としなければいけません。 もし、エラー発生...というのが、変数KAZUにエラー値が格納されるという意味であれば、 計算結果が、一般関数でいうところの #N/A を返しているだけですので、検索値や範囲を再確認してみては。
- bonaron
- ベストアンサー率64% (482/745)
Application.WorksheetFunction.VLookup では?