• ベストアンサー

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

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

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

  • ベストアンサー
  • fiva205c
  • ベストアンサー率43% (234/533)
回答No.2

LEFT関数の結果が文字列になってしまい、一方シート2にある支店コードが(おそらく)数値であるため、型が一致していないのではないかと思います。 文字列を数値に変換するVALUE関数を使用し、 =VLOOKUP(VALUE(LEFT(**)),・・・・) としてみてください。

ootaku
質問者

お礼

出来ました出来ました。

その他の回答 (4)

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

(1)Sheet1のA1に1234567といれた場合はA1セルの値は数値になります。 (2)また'1234567といれると文字列になります。 (3)どちらの場合も(特に(1)の場合エクセルが気を利かす結果)B1セルに=LEFT(A1,3)といれると、123となり 、左押せであることからも判るように、文字列の123になります。そもそもLEFT関数は文字列を扱い、文字列を返す関数です。 (4)一方検索する表の支店コードは(入力のしやすさから)数字(値)で作っていると思います。 (5)コンピュターのプログラムの処理の中では、文字列と数値は、大きな区別があって、同じとは見なしてくれません。 (6)エクセルが便利と思われるようにいろいろ気を利かす場面がある結果、プログラムに縁のない方は、数値と文字列の違いに注意希薄になる恐れがあります。 (7)以上で対策は明かです。(A)B1を数値化するか(B)表の第1列を文字列化するかです (A)はそう言う役割の関数VALUEを使う (B)は3桁の先頭に’をつけると良い。または=TEXT(D1,"000")。 (8)これらは表示形式(見た目)を変えるだけではダメです。 (9)また一般原則として、関数を関数の中で使う(ネスト)と、その部分に値と置換えたのと同等の効果がありますから、迷わないようにしましょう。

ootaku
質問者

お礼

詳しく説明までしていただきありがとうございました。

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.4

left関数の後に*1を付ければ数値になります。これで検索すれば可能だと。

ootaku
質問者

お礼

あ~なるほどと思いました。色々あるのですね。

  • yama_x
  • ベストアンサー率20% (188/940)
回答No.3

同じ半角数字であっても、組合員コードが数字なのかテキストなのかによって異なります。 vlookup関数の中を text(left(a1,"000"))か value(left(a1))にしてみてください。 a1は組合員コードが入っているセルを指定してください。 上の場合は文字、下の場合は数字が帰ってきます。 恐らくいずれかでOKだと思います。

ootaku
質問者

お礼

出来ました。ありがとうございました。

回答No.1

LEFT関数の出力が「文字列」として扱われているためでは? LEFT関数の出力をVALUE関数でくくって数値化してやればよいのではないでしょうか。

ootaku
質問者

お礼

簡単に出来ました。ありがとうございました。

関連するQ&A