
No.4ベストアンサー
- 回答日時:
補足。
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
No.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) '""を取る
No.3
- 回答日時:
(1)#1のご指摘が可能性が一番高いと思います。
(2)そのほかに、TRUE型でよいですか。ぴったりの値を探すのはFALSE型ですが。該当する値の範囲をさがすのが、TRUE型ですが?
(3)「範囲」の左端列と、第1引数の
”20061201"の数値か文字列かが合っていますか。
質問の例で下は20061201と数値、上は文字列になってます。
実態はどうなってますか。
(4))「範囲」の左端列と関数の第1引数が前後や途中スペースや半角・全角を含めて、思わぬ不統一がありませんか。
>Excel2003ではVLookup
まず変化はないでしょう。先日もバージョンのせいを疑った質問がありましたが、この習慣はよくないと思います。
基礎的な事項は97あたりから変わっていません。変わっている点も
有るので、むつかしいのでしょうが。
No.2
- 回答日時:
こんにちは。
XL2003でも Application.VLookup は使えます。
>エラーが発生します
とは、エラーでコードが止まってしまうという意味ですね?
なんというエラーメッセージですか?
まず、確認すべき事2点あります。
1)KAZUという変数の型は何ですか?
Variant型でないと、Application.VLookupの結果が#N/Aを返す場合は、その答えを格納する事ができません。
2)そのコードは標準モジュールに書かれていますか?
それ以外、例えばシートモジュールなどに書かれている場合、
かつRange("範囲")が他シート範囲を名前定義している場合、Excel.Range("範囲")としなければいけません。
もし、エラー発生...というのが、変数KAZUにエラー値が格納されるという意味であれば、
計算結果が、一般関数でいうところの #N/A を返しているだけですので、検索値や範囲を再確認してみては。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでfunctionを利用しようとし...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
インポート時のエラー「データ...
-
ApplicationとWorksheetFunctio...
-
ACCESSで値を代入できないとは?
-
エクセル マクロ VBAでスケジュ...
-
String""から型'Double'への変...
-
VBA エクセル で FIND でのエラ...
-
【VBA】ワークブックを開く時に...
-
Filter関数を用いた結果、何も...
-
マクロで"#N/A"のエラー行を削...
-
Null 値の使い方が不正です と...
-
実行時エラー93 パターン文字...
-
オブジェクト型の変数にフォー...
-
Findプロパティを取得できません
-
mailstorehomeのエクスポートで...
-
UWSCでエラー発生時の対処法に...
-
ACCESS DAO で不要なテーブルの...
-
変数にするとエラーになる理由は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報