• ベストアンサー

エクセルのVLOOKUP関数で検索範囲について

VLOOKUP関数の検索範囲がおかしなことになっているので教えてください VLOOKUP(k1,a1:e43,2)のようにしたとき、この検索範囲が、ある一定の量を超えると、演算結果が0となってしまいます。 初めは、43行を指定して問題なかったのですが、 そのファイルをコピーしていくつか修正を加えバックアップファイルを作成したところ、検索値が0となってしまいました。43としていたところを、30にすると正確な数値を検索します。 さらに別ののファイルでは、15まで落ち込んでしまいました。検索値が0となるだけで、エラーにはなりません。 a1の値は、1から43までの正数です。 確認のため、1番目しかデータを入力していません 1番目が表示されないのでは、2番目もないと考えています。 また、検索値のa1は、20程度入力してあります。それ以降が0でも問題なく動作しています。 どなたか、ヒントになることをレスしてください。

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

>それが、ファイルをコピーしたことで、崩れてしまったとは思えません これは「単なる偶然」に過ぎません。 「コピー前は、検索結果は不定だけど、偶然、辻褄が合う検索結果が返って来た。コピー後は、検索結果は不定だけど、偶然、辻褄が合わない検索結果が返って来た」というだけの話です。 「結果は不定」の意味を良く考えて下さい。この「不定」は「毎回結果がコロコロ変る」って意味じゃありません。 この場合の「結果は不定」と言うのは「あるファイルでは、偶然、正しそうに見える結果が返る事もある。違うファイルでは、データの値が同一でも、間違った結果が返る事もある。何がその違いを左右しているのかも判らない。つまりファイルをコピーしただけで結果が変るかも知れない」って事です。 「偶然、正しそうに見える結果が『不定な結果』として返されていただけで、使い方が間違っている」のは明白です。 「第4パラメータを省略したら、検索データは『絶対に』昇順に並んでないといけない」と言う決まりがある限り、その仕様に合わせて使うしかありません。 その決まりに不満なら、エクセルを使うのをやめるか、マイクロソフトに文句を言って下さい。

obaoba9
質問者

お礼

そのとおりですね 偶然とは恐ろしいものです。 出来るだけ正しい使い方を心がけます。 ありがとうございました。

その他の回答 (3)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

追加。 「範囲(A1:E43)の左端の列(つまりA1~A43)は、昇順に並んでいる必要があります」と言う事は、言い替えれば「A1~A43は全部データが埋まってないとダメ」って事です。 何故なら「空白セルは、最も値が小さいので、昇順に並べた時は先頭に来なければならない」からです。 つまり、データがA1~A20にしか入力されてないなら、A21~A43は空白セルになってしまい「空白セルが先頭にないなら、昇順に並んでる事にならない」と言う事になります。 データがA1~A20にしか入力されてないなら、 VLOOKUP(K1,A1:E20,2) と入力されている範囲に合わせるか VLOOKUP(K1,A:E,2) のように全行を検索範囲にしましょう。

obaoba9
質問者

補足

全行を検索範囲にしも結果が同じです。 検索値の値は、空白ではなく、0が入力されています。 0があっても、別のファイルでは検索は正常に機能していました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

VLOOKUPの第4パラメータが省略されているので、第4パラメータはTRUEが指定された事になっています。 第4パラメータを省略するかTRUEにした時は、範囲(A1:E43)の左端の列(つまりA1~A43)は、昇順に並んでいる必要があります。 昇順に並んでいない場合「何が検索結果になるかは不定」になります。 多分「昇順に並んでいないといけない」というのを知らずに、データの修正をした時に並びを壊したのだと思います。 30で正常、31で異常になるファイルでは、30番目と31番目の大小関係が逆になっていると思われます。 15で正常、16で異常になるファイルでは、15番目と16番目の大小関係が逆になっていると思われます。 「データの並べ替えで検索テーブルが常に昇順になるようにする」か「VLOOKUPの第4パラメータをFALSEにする」かで対処して下さい。 なお「VLOOKUPの第4パラメータをFALSEにした」場合は、ソートしなくても済む代わりに、近似値は検索出来なくなります。つまり、完全に一致する値だけ検索され、見付からない場合は結果は「#N/A」になります。

obaoba9
質問者

補足

パラメーターは、省略しています。 また、15番以降のデータは、0で昇順に並んでいません。 43まで指定しているのですが、21までが昇順になっていて、以下が0です。(15の場合は、昇順に並んでいるデータは7です)それでも、使えていたのです。 それが、ファイルをコピーしたことで、崩れてしまったとは思えません

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.1

=VLOOKUP(k1,a1:e43,2)のデータ範囲を絶対参照にしていなからでは? =VLOOKUP(k1,$a$1:$e$43,2)にすればどうなりますか

obaoba9
質問者

補足

早速回答ありがとうございます。 絶対参照でも変わりません。=VLOOKUP(k1,a:e,2)のように行番号を省略しても同じです。 なお、シートはもう少し複雑で、VLOOKUP関数を多用しています。といっても、150個ぐらいですが また、a列は、他のシートにリンクしています。 でも関係ないですよね。 ファイルをコピーしたときに、こっちで出来ていたことが、こちらでは出来なくなるというのが分かりません。 さらに、出来ない度合いも違っているのがしゃくに障ります。

関連するQ&A

  • VLOOKUP関数の範囲名

    VLOOKUP(検索値,範囲,列番号) の範囲のところに 参照範囲を定義した「名前」を入力する場合がありますが、 VLOOKUP(A1,B1:E4,2)→VLOOKUP(A1,LIST,2) この時、例えば A3に「LIST」と入力して VLOOKUP(A1,A3,2)としてもエラーとなってしまいます。 何か良い方法はありませんか?

  • VLOOKUP関数の範囲がずれてしまう

    VLOOKUP関数を使用していますが、 たとえばVLOOKUP(B10,A1:B8,2,FALSE)の式を下にドラッグしてコピーしていくとVLOOKUP(B11,A2:B9,2,FALSE) VLOOKUP(B12,A3:B10,2,FALSE)という様に範囲がA1からA2、A3とずれていってしまいます。検索のB10がB11、B12と成るのはいいのですが、範囲は、固定にならないと式をコピーできないように思うのですが誰か分かる方教えてください。

  • Excelの関数「VLOOKUP」について質問です

    以下のような表で 1 2 3 51 2 4 1 19 3 8 5 21 4 6 1 24 5 2 7 31 6 4 5 35 7 8 7 60 8 2 3 17 9 4 1 30 A11=空欄 A12=VLOOKUP($A11,$A$1:$D$9,2,FALSE) A13=VLOOKUP($A11,$A$1:$D$9,3,FALSE) とするとき、 A11に「5」と入力すると A12は「2」 A13は「7」になりますよね。 このときに新たにA14に、4列目の値を返すVLOOKUP A14=VLOOKUP($A15,$A$1:$D$9,4,FALSE) A15=任意の数を入れる を作りたいのですが、そのときに検索範囲を、A12,A13に求めた1列目の範囲 つまり2行目から7行目(A2からD7)に、自動的になるようにしたいのですが 検索範囲をどのように設定すればいいでしょうか。 お願いします

  • エクセルVLOOKUP関数の検索値について

      A   B     C     D     E 1 あ AAA 2 い  BBB 3 う  CCC 4 え  DDD 5         お   い  =VLOOKUP(C5,A1:A4,2,0) VLOOKUP関数にて、質問です。 検索値候補1=C5のセル 検索値候補2=D5のセル 範囲=A1:B4 E5=関数 (ここに式を入れたい) 検索値候補1がない時は、候補2を検索する そんな式はどうすればよいですか? 素人ですので、おたすけください

  • VLOOKUP関数で検索できません

    A列に勤務時間帯、B列に人数を入力したリストがあります。 E1にVLOOKUP関数を入力しましたがエラーになるので困っています。 A1 → 8:00~18:00  B1 = 5 A2 → 9:00~19:00  B2 = 7 D1 → 8:00~18:00 E1 → =VLOOKUP(D1,A1:B2,2,0) チルダを抜くと検索できるようになりますが、 VLOOKUP関数でチルダは使えないのでしょうか。 チルダありでも検索できるうまい方法があれば教えて下さい。

  • EXCEL VLOOKUPで含む検索

    _|    A    |  B   | C  | | Z | 1 |赤いイチゴ |みかん |\30 | |   | 2 |        |リンゴ  |\50 | |   | 3 |        |イチゴ  |\80 | |   | A1に検索値(例:赤いイチゴ)を入力すると、検索範囲(B:C列)のっている単語が含まれていれば値段をZ1に表示したいのですが、うまくいきません。 検索値が一致ならば、=VLOOKUP(A1,$B:$C,1,FALSE)だとおもうのですが、=VLOOKUP("*"&A1&"*",$B:$C,1,FALSE)だと#N/Aエラーが出ます。 どなたか、知恵をお貸しください。

  • ExcelでVLOOKUPの引数にMID関数を使う?

    ・Sheet1のA1セルの数値をVLOOKUPの検索値にする ・Sheet1のA1セルの数値が6桁あって、左から2・3・4番目の数値を使う ・Sheet2にVLOOKUPの「範囲」になる表がある 以上の条件のとき =VLOOKUP(MID(A1,2,3),Sheet2!$表のセル範囲$,列,型) という数式を作ったのですが、「NAME#」エラーがでました。 正しい数式を教えていただければ助かります。 よろしくお願いします。

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

  • VLOOKUP関数の「検索値」を範囲で指定する

    エクセルのVLOOKUP関数で、通常は検索値は一意のものを指定しますが、範囲指定しているケースがありびっくりしてしまいました。これはどのようなことなのでしょうか?   A   B 1 品名  単価 2 もも  200 3 りんご 150 4 みかん 100 5 なし   80 とあり、   C   D  1 品名  単価 2 なし 3 もも 4 みかん C列に入れた検索値で、上の表から単価を検索する場合、 通常 =VLOOKUP(C2,$A$2:$B$5,2,FALSE)といった感じで D2のセルに打ち込み、D2のセルの場合は、「検索値はC2」と固定している思うのですが、 =VLOOKUP($C$2:$C$4,A2:B5,2,FALSE)でも 同じ結果になっています。もちろんこれをそのままD4までコピーしても求める通りの結果が出てきます。 検索値は、式においては必ずしも一意で指定する必要はないのでしょうか?

  • EXCELのVLOOKUP関数について

    EXCELのVLOOKUP関数について教えてください。 例えばA1が○でC1が×のとき、その該当行の3列目を示す というような検索値を2つ満たすようなやり方は可能でしょうか? 範囲、列番号とも検索値1つに対応しているのでvlookup関数を並列することになるのでしょうか? 別の簡単な方法があれば教えてください。 わかりにくい質問で申し訳ございません。よろしくお願いします。

専門家に質問してみよう