• 締切済み

VLOOKUP関数について、文字列と数値の問題

お世話になります。現在、商品リストを作っておりまして、VLOOKUP関数を使っているのですが、エラーになってしまいます。 =VLOOKUP(A1,Sheet2!$A$2:$B$6,2,FALSE) という関数を使っているのですが、 A1に3桁のコードを入れるとSheet2のA2:B6から値を返すようになるのですが 「110」というコードを入力すると「白」と出てくるのですが、「010」というように0から始まるコードだと エラー#N/Aになってしまいます。セルによっては逆の現象が起こったりします。 文字列を数値にしたり、その逆を試してみたり(A1もsheet2の参照データも調節しましたが)したのですがどうしてもうまくいきません。 何が原因なのかまったくわからないのですが、心当たりのある方教えていただけますでしょうか。 よろしくお願いいたします。

みんなの回答

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

>「110」というコードを入力すると「白」と出てくるのですが、「010」というように0から始まるコードだとエラー#N/Aになってしまいます。セルによっては逆の現象が起こったりします。 このパターンは「数値」と「文字列」の数字が混在しているときに発生します。 このような場合は、検索リストと検索値のコード番号データをどちらかに統一する必要があります。 例えば数値に統一するときは、コード番号入力列のセルの表示形式をユーザー設定にして、「000」のようにして3桁の数字を入力します。 一方、文字列に統一する場合は、コード番号のセルの表示形式を「文字列」にして、そのまま入力します。 ただし、セルの表示形式を変更するだけでは、データの内容が変更されるわけでないので、表示形式を変更後、検索値や検索リストのコード番号を再入力する必要があります。 この入力操作を行うことなくまとめて「数値」データに変更するには、コード番号の列を選択して、「データ」「区切り位置」で「完了」してください(コード番号のセルの表示形式をユーザー定義で000にしてください)。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

>何が原因なのかまったくわからないのです  ⇒原因はご質問者の推察の通り、数値と文字列の差にあります。   そこで、セルの書式設定から書式を変更されたと思いますが、この操作によって即時に書式は反映されませんので混乱されたのではないでしょうか。   今回はデータ量(A1及びSheet2!A2:A6)も少なそうなので書式変更後にデータを再入力して下さい。   因みに対象範囲が多い場合、データ→区切り位置→次へ→次へ→列のデータ形式欄で形式を選択→OKで可能です。(但し、列を跨るような範囲はできません)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

シート2のA2セルからA6セルには数値が入力されているわけですね。その場合にはA1セルに入力する値は文字列としての数字ではなく数値を入力することが必要ですね。A1セルにゼロから始まる数字を入力するということは文字列を入力していることになり、シート2の数値と一致するはずもありません。 A1セルが標準の状態で010と入力すれば10と表示され、その場合には10という数値が入力されたことになります。シート2に10の数値が無ければ該当する数値が無いのですからエラー表示になります。また、シート2に数値として110がある場合でも文字列としてA1セルに110を入力してもエラー表示になります。文字列として入力してもエラーにならないようにするのでしたら式を変えることでしょう。また、エラーとなる場合にはエラー表示をさせないようにするのでしたら次のような式にすればよいでしょう。 =IF(COUNTIF(Sheet2!$A$2:$A$6,VALUE(A1))=0,"",VLOOKUP(VALUE(A1),Sheet2!$A$2:$B$6,2,FALSE)) この式では文字列の数字として入力した値は数値に変換して使用しています。

noname#164823
noname#164823
回答No.1

参照表とコードを入れるセルの書式を「ユーザー定義」で 「000」としてみて下さい。 10と入れるだけで、010となります。これなら値を返します。

関連するQ&A

  • エクセルでVLOOKUP関数でエラーが出ました教えてください

    ある表を作り、違うシートに工種コードの表を作り 下記の関数を作ってみました =VLOOKUP(B5,工種コード!$C$2:$D$129,2,FALSE) すると #N/A このエラーが出ます ちゃんと表示されるところもあるのですが どうすれば良いか分かりません 教えてください

  • VLOOKUP関数のコピーについて

    お世話になっております。VLOOKUP関数を違うセルにコピーするのですが、参照するセルが替わりません。。#N/Aエラーが出てしまいます。たとえば、=VLOOKUP(B24,M3:N21,2,FALSE)をコピーして、違うセルに貼り付けても、=VLOOKUP(B24,M3:N21,2,FALSE)。また、オートフィルでやると、参照範囲もずれてしまいます。上手にコピーする方法はないのでしょうか。よろしくお願いします。

  • VLOOKUPでエラー表示と0表示を無くしたい

    VLOOKUPで下の条件にあった数式を作りたいのですが、うまくいきません。 条件は (1)参照先のセルが数値のため0が表示されるが、0と空白は区別したいので、戻り値が空白の場合は0を表示させない。 (2)参照元のシートには参照先には無いコードがあるので、エラー(#N/A)が出てしまうがエラーも表示させない。 作ってみた数式は =IF(OR(VLOOKUP(B1,入力!$B$1:$C$6,2,FALSE)="",ISERROR(VLOOKUP(B1,入力!$B$1:$C$6,2,FALSE))),"",VLOOKUP(B1,入力!$B$1:$C$6,2,FALSE)) です。 戻り値が空白、またはエラーの時に参照先のセルが空白になるように作ったつもりですが、どうしてもエラー(#N/A)が出てしまいます。 どなたかアドバイスいただければ嬉しいです。 よろしくお願いいたします。

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

    エクセルのシート(1)に組合員コード(7桁),氏名,商品,数量・・・が入力してあって、列を挿入し、その組合員コードの左3桁を表示するLEFTの文字列関数を入力します。 それによって3桁が表示され、その3桁のコードは、支店コードを意味するので、シート(2)に支店コード、支店名が入力してあるのでそこから参照するようにシート(1)の3桁が表示されている隣に新たに列を挿入し、シート(2)の支店コードから支店名を引き出すようにVLOOKUP関数を入力したら、「N#A」という表示が出て支店名が表示されません。 LEFT関数によって表示された文字列だと「N#A」で支店名が表示されないのですが、自分で3桁の数字を入力すると支店名が表示されます。 3桁の文字列の結果の値だけをコピーしても、「N#A」が表示され、支店名が表示されません。 文字列関数によって表示された結果から、VLOOKUPで参照は出来ないのでしょうか? 1つずつ自分で数字を入力するしかないのでしょうか? 他に何か別の方法でも構いませんので、教えていただけないでしょうか?

  • VLookUp関数の使い方

    VLookUp関数で[検索の型]をFalseにすると、検索値と同じ値がないと エラーコード(#N/A)を返してきます。 検索値と同じ値がないときは、別の処理をしたいので、エラーコードではなく別の文字列を返してほしいですが、 できますか?

  • VLOOKUPでエラーの場合はある列の数値に、としたい。

    色々探したのですが似たような例が見つからないのでこちらで質問させて頂きます。 VLOOKUPを使って、#N/A と、エラーが出るセルには、そのままではなくて、別のある列の数値を入れなさい、としたいのです。 このままの式だと、VLOOKUP(A1,$C$1:$D$5,2,false) なのですが、この場合の#N/Aに、もとの1の表の う にある 125 を持っていきたいのですが、 どのように式をかえればよいでしょうか? よろしくお願いします。 1の表           2の表          修正 A    B         C    D    →    E あ   123        あ    156        156 い   124        う    180        #N/A う   125        え    150        180 え   126        か    160        150 お   127        お    160        160

  • エクセルのVLOOKUP

    エクセルのVLOOKUPで違うシートにあるデータをひっぱりたいのですが シート1のA2~A50まで 20100110~20111011 までランダムに入っています。 この数値は、年月日の 8桁です  (シート1は他人が作ったデータです )シート2のA1~A7まで、8この数値は自分で打ち込みました) 20101001 20111001 20101011 20111001 20110201 20110201 20110301 シート2のB1~B7まで  あ  い  う  え  お  か  き  とはいています。 これをシート1のB2~B50まで B1~B7まで入っている  あ  い  う  お   か  き をひっぱりたいのです。シート1に入っている ですが、VLOOKUPで引っ張っても エラーになってしまいま8ケタの数値をクリックして セルの書式設定でシート1とシート2の8ケタの数値を数値にしても エラーになります エラーになる原因はなんですか?

  • VLOOKUP関数をIFで条件付けしたのですが。。

    シートが2枚あり1枚は名簿シートです。 別シートのセルA1に名簿シートのコード番号を入力し セルA2にVLOOKUP関数で式を下記のように入れています。 =VLOOKUP(A1,名簿!N:P,3,FALSE) このとき値がブランクになるときがあるので そのときは隣の列から数値を拾い出したいのです。 そこで =VLOOKUP(A1,名簿!N:Q,4,FALSE) だと思うのですがですが、自分でIFで式を組んだら =IF(VLOOKUP(A1,名簿!N:P,3,FALSE)="",VLOOKUP(A1,名簿!N:Q,4,FALSE),VLOOKUP(A1,名簿!N:P,3,FALSE)) となりました。 一応、希望通りの答えが返されるのですが、 もっと簡潔な組み方はあるのでしょうか?? IFでなくても何か方法があるのでしょうか?? よろしくご教授お願いします。

  • vlookup関数についてですが。

    こんにちは。 仕事で使う注文書をエクセルで作っています。 sheet1が注文書本体。sheet2が商品一覧(データベース形式)で左からコード番号(5桁)、商品名、内容量、単価などと並んでいます。 問題は、注文書のsheet1のコード番号を入力する箇所が、セルが5つ横並びで、1セルに1文字づつ入れるようになっています。 そこで、考えたのが注文書の5桁のコード番号を取得するセルを設けそこに(=D18&E18&F18&G18&H18のようにして)5桁のコード番号を取得、そのコード番号に対応するセルをsheet2の商品コードから抜き出し、その横の商品名を、sheet1注文書の商品名をN18に返すようにしました。(=IF(I18="","",VLOOKUP(I18,Sheet2!A2:E400,2,FALSE)) しかし、N18に返ったのは、#N/Aでした。 なぜでしょうか? どのようにすれば、N18に商品名を返すことが出来るでしょうか?

  • 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関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

専門家に質問してみよう