• ベストアンサー

Excel2003でVLookupは使用できない?

マクロなのですが、 Excel97で動作していたものをExcel2003で動かすとエラーが発生します。 エラー発生場所は、 KAZU = Application.VLookup("20061201", Range("範囲"), 2, True) で、Application.VLookup(20061201, Range("範囲"), 2, True)の値を調べたら エラー 2042が入っていました。 Excel2003ではVLookupが使用出来ないのでしょうか?

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答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

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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) '""を取る

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

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

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

こんにちは。 XL2003でも Application.VLookup は使えます。 >エラーが発生します とは、エラーでコードが止まってしまうという意味ですね? なんというエラーメッセージですか? まず、確認すべき事2点あります。 1)KAZUという変数の型は何ですか? Variant型でないと、Application.VLookupの結果が#N/Aを返す場合は、その答えを格納する事ができません。 2)そのコードは標準モジュールに書かれていますか? それ以外、例えばシートモジュールなどに書かれている場合、 かつRange("範囲")が他シート範囲を名前定義している場合、Excel.Range("範囲")としなければいけません。 もし、エラー発生...というのが、変数KAZUにエラー値が格納されるという意味であれば、 計算結果が、一般関数でいうところの #N/A を返しているだけですので、検索値や範囲を再確認してみては。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

Application.WorksheetFunction.VLookup では?

関連するQ&A

  • vba vlookupについて

    VBAで範囲検索をしたくて、 vlookuを使おうと思ったのですが 1000~2000 2001~3000 3001~4000 4001~5000 5001~6000 6001~7000 7001~8000 8001~9000 9001~10000 このような表から 1237 を検索しようとすると失敗してしまいました(・・;) wskyu.Range("D24") = Application.WorksheetFunction.VLookup(kihon, .Range("D:H"), 5, True) このコードでエラーは起きず、 kihonに1237が入っています 1000 2001 ↑がD列です H列は 309 359 406 569 630 680 700 703 904 こんな感じです 思い通りにいけば1237を検索するので当てはまるのは1列目で 309が表示される予定だったのですが 実際やってみると630が表示されました、、、 なぜなのでしょうか そもそもVLOOKUPでこのような検索方法はできないのでしょうか? 補足として 最初はSELECT CASEを使い 1000~2000の間にあれば 309を表示 という風にしていたので 表などが間違っているのではないようです しかしそれだとコードがとても長くなってしまうので VLOOKUPにしようと思いました どうかよろしくお願いします!!

  • Vlookupマクロにつきまして

    初心者で、 エクセルのマクロにて、下記の処理を行おうとしているのですが、 上手く行きません。 どなたかお助けください! B3=Vlookup(A3,Sheet2!A:F,3,False) B4 A4 B5 A5 とA列に値がある限りカウントアップしていきます。 以下の通り考えてみたのですが、動きません。 Sub vlookup() Dim i As Long For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row Cells(i, "B") = Application.WorksheetFunction.VLookup(Range(Cells(i, "A")), Worksheets("Sheet2").Range("A:F"), 3, False) Next End Sub すみません、宜しくお願いします。

  • EXCEL2000VBAのアプリケーションエラーについて

    EXCEL2000VBAにてユーザーフォームを使ったマクロを作ったのですが、マクロを実行しユーザーフォームからエクセルのシートにデーターを移行する際に、アプリケーションエラーというエラーがでます。 他のイベントプロシージャの動作ではこのエラーは発生しません。 EXCEL2003でも発生しました。 はっきり分かりませんが、必ずアプリケーションエラーが生じるのではなく、1,2度保存や終了を繰り返した後に発生するようです。 アプリケーションエラーどういった場合に発生するのでしょうか? また、なぜこのようなことが発生するのでしょうか? 初心者ですのでよろしくお願いいたします。

  • Excel:VLOOKUP関数で検索値が見つからないとき、エラーが出ないようにしたい。

    ただいまこういった数式を使っているんですが、 =IF($G$12<>"",$H$12-VLOOKUP($G$12,使用材料,2,0),) この数式の場合、範囲”使用材料”に、G12の値が見つからないと、エラーになってしまいます。 エラーが出ないようにするには、どういった数式にすればよろしいのでしょうか?

  • マクロでvlookup 

    マクロでvlookupを使用したいのですが、 動かした結果が #N/A になります。 どこが間違っているのでしょうか? マクロはこれ Sub macro1() Worksheets("訪問予定").Select Cells(3, 2).Value = Application.VLookup(Cells(1, 2).Value, Worksheets("担当").Range("A1:C5"), 2) End Sub 日本語で次のように私は認識してます。 「サブマクロ 訪問予定シートを選択 3行2列目の値は担当シートの日付と一致する行の2列目の値 エンドサブ」 やりたいことは 担当シートをもとに 訪問予定シートの担当蘭を埋めることです。 上記のマクロでは ループさせてないので 一か所しか埋められませんが ループを使ってひと月の担当予定を埋める方法を考えてます。

  • エクセルのVLOOKUPについて

    VLOOKUP関数について VLOOKUP関数の使用方法は  VLOOKUP(検索キー、範囲、列数、検索の型) である  多くのWEBの使用例では検索キーで検索するのは「範囲」の第1列であり、  返す列の値は2列以降という例ばかりである。  このとき、検索キーで「範囲」の第2列を検索して、  「範囲」の第1列の値を返すようにできるか、という質問です。 なおエクセルの版数は2000です。 よろしく、お願いします。 以上

  • エクセル VBA VLOOKUP

    お世話になります。 VLOOKUPの範囲を変数で取得したいのですが教えて下さい。 下記コードは動きますが、検索範囲の("A1:C4")の『C4』を変数に変更はできますでしょうか。 (データは増える予定ですなので) Range("E1") = Application.WorksheetFunction.VLookup(Range("D1"), Range("A1:C4"), 2, False) 宜しくお願い致します。

  • vlookup

    Excel関数であるVLOOKUPについて vlookupの構文は、 (検索キー, 範囲, 番号, [並べ替え済み])です。 質問は、次の説明についてです。 並べ替え済みを TRUE に指定するか省略し、範囲の先頭列が並べ替え順でない場合、間違った値が返されることがあります。 これ(間違った値が返される場合)は、どのような場合なのでしょうか? 検索対象の列(指定した範囲の先頭列)が並べ替え済みにすることが必須なのでしょうか? 初心者で恐縮ですが、よろしくお願いします。

  • VBA WorksheetFunction.VLookupとoffsetプロパティー

    エクセル2002使用です。 VBAの記述で、WorksheetFunction.VLookupを使って求めた値の入っているセルの列方向に一つ下の値を取得したいのですが・・・・ range("A1").Value =WorksheetFunction.VLookup( range("B1").Value, Range("A3:C10"), 3, 1) 例えば上記で得た値がC4セルにあるのであれば、C5セルの値を取得したいのです。 offset(0,1)プロパティーをどこにおけば良いのか良くわかりません。 どうかよろしくお願いします。

  • VLOOKUP関数とテキストボックスの連携

    エクセルでユーザーフォームを作成しています。 「テキストボックス11」に、以下のように、VLOOKUP関数を入れたいのですが、 どのようにしたら良いのか、わかりません。 ●入れたい関数は ISERROR関数とVLOOKUP関数を組み合わせたもの。 =if(iserror(vlookup(「コンボボックス1」の値,マスタ!A80:D90,4,false)),""vlookup(「コンボボックス1」の値,マスタ!A80:D90,4,false)) (1)「コンボボックス1」の値を検索値とする。 (2)参照範囲は「マスタ」シートの「A80:D90」 失敗しているVBAは以下の通りです。 Private Sub UserForm_Initialize() TextBox11.Value = Application.WorksheetFunction.if(iserror(VLookup(ComboBox1.Value, Range("A85:D94"), 4)),"",VLookup(ComboBox1.Value, Range("A85:D94"), 4)) End Sub 教えていただけると助かります。

専門家に質問してみよう