• ベストアンサー

エクセルでのソートがうまくいきません

エクセル2000を使っています。 VLOOKUP関数を利用して見積書を作っていますが、時たま上手くいかない事があります。 見積書は、 見積書のページに A列:数字4桁の商品コード B列:商品名 C列:単価 (例:1001 アイスクリーム 1,500) 商品コードのページも全く同じで、A列でソートしてあります。 VLOOKUPを使って、見積書のA列の4桁の数字に対応した商品コードのB列C列からデータを持ってくるようにして、見積もり書のB列とC列をうめる・・・という簡単な仕組みです。 ところが、なぜかB列とC列にうまくデータを持ってこられない行がいくつか出てくる事があります。(#N/Aと表示される) ちなみに、見積書も商品コードもA列のセルは文字列に設定しています。 また、変換できなかったA列の数字を上書きして入力すると半分くらいはB列C列が#N/Aから本来のデータになるのですが、相変わらず変化なしの場合もあります。 そのような場合は、見積書のA列に商品コードのA列をコピーしたものを貼り付けて上書きするとちゃんと表示できるようになります。 この場合の見積書は、過去に作ったいろんな店舗への見積書を行追加して新たに作った「年間の見積書の全て」といった物なので、時によってA列のセルの性格が違っている場合があるかも・・・という訳で改めてA列を文字列に設定し直しています。 が、これをやってもA列での並べ替えもうまく昇順にならない場合がありますので、やはりセルによっては統一されていない部分があるのかと調べてみましたが全て同じく文字列になっています。 どうにも訳が判りません。 長い文章で申し訳ありませんが、御判りの方がおいででしたら後教授ください。

  • nerio
  • お礼率39% (31/78)

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

  • ベストアンサー
  • inspec
  • ベストアンサー率100% (2/2)
回答No.4

セルの設定が文字列でも中身のデータの型が数値の場合があります。 数値を入力してから、後から書式設定で文字列に変えるとそうなったりします。 VLOOKUPで検索するキーと参照する表のデータの型が一致していなければ表から取得できません。 セルの設定が文字列なら、データの型が数値の入っているデータでF2を押しEnterで再確定するとデータの型も文字になります。 データが多くてこのやり方では厳しい場合は、式でデータの型を修正することもできます。A1セルが修正対象のセルだとしたら、別のセルに=A1&""とし、これをA1に値の貼り付けすれば、文字列に変換できます。 検索するキー、検索する表ともにデータの型を文字列にしてみてください。

nerio
質問者

補足

ご回答ありがとうございます。 いろいろ考えてというか、結局のところ理由はまだ理解していませんがおっしゃる通り「セルの設定は文字列だが、中身のデータは違っている」という状態のようです。 >データの型が数値の入っているデータでF2を押しEnterで再確定するとデータの型も文字になります。 複数の見積もりを行追加して作った「年間の見積書の全て」(120行あります)をA列でソートしたものを見ると、1行目から85行目までと86行目から120行までの2つグループに分かれます。 この第2グループがうまくデータを持ってこられないので、F2+エンターで変換したところ形式が一致してデータを表示できました。 さして多くの行数ではなかったので、全行このやり方で変換したところきれいに揃いました。 どうもありがとうございました。

その他の回答 (4)

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

両方の文字列に違いがあることは確実です。 疑わしいセル同士で=EXACT(Sheet1!A1,Sheet2!D1) のようにしてFALSEが出れば、何か違うのです。 スペース(TRIM関数で取り除ける場合もあります)や見えない文字コードが入っている可能性かあります(CLEAN関数で取り除ける場合もあります)。 後は全角か半角です。(JIS関数などで統一できる場合があります) 色々な原因タイプを学ぶことはできますが、1度で訂正は難しいでしょう。テーブルを作った方のせいです。 エクセル(システムや関数)がおかしい、なんて方にぐらつかないこと。 VLOOKUP関数の第4引数は、質問の場合FALSEを略さないこと。 FALSE型は検索表を並べ替えしなくて良い。ならべ変えの話題が出ることが、VLOOKUP関数FALSE型の勉強不足です。 >御判りの方がおいででしたら 質問者のパソコンデータが見てテストできないのですから、誰にもはっきりと答えられません。

nerio
質問者

補足

ご回答有り難うございます。 見積書と商品コード表が一緒になったBOOKは私が作り、複数の営業担当者に渡して使ってもらっています。 商品コードを入力する際は「直接入力で入れるよう」に指示しています。 >エクセル(システムや関数)がおかしい、なんて方にぐらつかないこと。 そんな大それた事は思ってもいませんし、言ってもいませんが。 >質問者のパソコンデータが見てテストできないのですから、誰にもはっきりと答えられません。 そういう意味ではなく、「文字列に設定したセルに入力したデータが文字列以外に判断されるような事があるのだろうか?またそのような経験をお持ちの方がおいででしたら」という意味で書いたつもりでしたが・・・。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

原因は、わかりませんが、 商品コードを入れるセルに、入力規則 設定していますか。 別シートなので、A列の商品コードに名前をつけます。 例えば、商品コード 商品コードを入れるセルに、入力規則、リストで、範囲には=商品コード これで、商品コードに登録したコードしか入力できなくなります。 (入力ミスはなくなる) もうひとつは、VLOOKUP関数の最後の引数に ,FALSEを入れておく 並び替えが、昇順でなくても、エラーが出ないように 当方、エクセル2003のため、試しが出来ません。

nerio
質問者

補足

ご回答有り難うございます。 >商品コードを入れるセルに、入力規則、リストで、範囲には=商品コード これをやってみたのですが、「範囲に商品コード」というところが良く解からず、「元の値(S)」というボックスに手入力で「商品CD」(実際のシートの名前です)といれてみました。 しかしそれで見積書に4桁の数字を入力しても(直接入力でもそれ以外でも)エラーになってしまいます。 どうもそこのところが理解できていないようです。 >もうひとつは、VLOOKUP関数の最後の引数に ,FALSEを入れておく ちなみに「=IF(ISBLANK(A2)," ",VLOOKUP(A2,商品CD!$A$1:$D$9999,2,FALSE))」という式を設定しています。 見積書のA列(商品コード)に数字が入っていない場合は、商品名欄を空白にし、FALSEも用いています。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.2

A列は、文字列ではなく、数値で管理したほうが良いような気がします。 数字だけなのですから、数値としたほうが、間違いが出ないでしょう。

nerio
質問者

補足

ご回答有り難うございます。 会社で使っています商品コードは「0001」から「9999」までの、全て4桁で出来ています。 A列を数値にした場合、「0001」は「1」と表示されてしまいますので、それですといろいろと具合が悪いので文字列にして4桁表示をさせています。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

補足ポイントその3:引数「検索の型」について http://allabout.co.jp/computer/msexcel/closeup/CU20060805A/index3.htm ご参考になるかもです。

nerio
質問者

補足

ご回答有り難うございます。 休みの日に最初から読んでみます。

関連するQ&A

  • エクセルの質問です

    A列は空白 B列に商品をあらわ5桁のコードが入っています。 C列にも同じく商品を表す5桁のコードが入っているのですが、 B列のセルと隣り合ったセルには同じ数字が入っていません。 D列には取引先の会社名が入っています。     B1に入ってる5桁の数字と同じ数字が入っている C列のセルを探し、 そのセルの隣のD列の会社名をA1のセルに表示させたいのですが、 どう関数を組んだらいいのでしょうか? A   B    C   D     12345 12354 A社    12334 12345 B社    12443 12544 C社 上の表の場合B1とC2数字が同じなのでA1にB社と表示させたいのです。  B列が昇順で並んでいる C列とD列は重複しない という条件で <=vlookup(b1,c:d,2,false)> という回答を頂いたのですが、 B列が昇順で無い(ランダムに数字が入っています) D列には同じ会社名が何度も出てきます。 どうすればいいのかわかる方お願いします。

  • エクセルの質問です

    A列は空白 B列に商品をあらわ5桁のコードが入っています。 C列にも同じく商品を表す5桁のコードが入っているのですが、 B列のセルと隣り合ったセルには同じ数字が入っていません。 D列には取引先の会社名が入っています。     B1に入ってる5桁の数字と同じ数字が入っている C列のセルを探し、 そのセルの隣のD列の会社名をA1のセルに表示させたいのですが、 どう関数を組んだらいいのでしょうか? A   B    C   D     12345 12354 A社    12334 12345 B社    12443 12544 C社 上の表の場合B1とC2数字が同じなのでA1にB社と表示させたいのです。  

  • 【エクセル】VLOOKUPが上手くいきません。。。

    VLOOKUP関数がうまくいかないので教えてください。 下のような表になっています。    A     B    C    D    E    F 1  番号  名前               コード 2 11-2345  ABC  11  #N/A  11  あああ 3 22-3456  DEF  22  #N/A  22  いいい  4 33-4567  GHI  33   #N/A  33  ううう 5 44-5678  JKL  44        44  えええ 6 ・・・・ ・・・               55  おおお 7 ・・・・ ・・・               66  かかか A、B列はがもとから打ち込んであるデータです セルC2は =LEFT(A2,2) でA列のハイフンの前を表示しています。 セルD2に =VLOOKUP(C2,$E$2:$F$7,2,FALSE) を入れると#N/Aが表示 されます。ちなみに、セルC2にLEFT関数ではなくて、数字をそのまま、 11と入力すると、セルD2に「あああ」と表示されます。どこがいけない のでしょうか? $E$2:$F$7はC列の二桁の数字に対応するコードの表になっています。 エクセル2003を使っています。

  • エクセルのソートについて

    こんにちは いつもお世話になっています。 エクセルのソートに関して教えてください。 A列に商品名(ふりがな情報あり)、B列に一桁と二桁の数字(標準表示形式)があります。 ソートの優先順位を第一がB列の下一桁の数字、第二がA列の商品名にする方法を教えてください。 よろしくお願いします。

  • エクセル縦横検索

    エクセルの縦横検索で関数がわからず何日も悩んでいます。。 <Sheet1> は商品コード・ランクごとの単価表です。   A列    B列     C列   D列    E列  F列 1  商品コード 商品名  Sランク Aランク BランクCランク  2  00010001 AA-1111 10.00 11.00  13.00 14.00 3  00100022 AB-222  11.00 12.00  15.00 16.00 4  00200033 BDB-123 20.00 21.00  22.00 23.00 5  00300033 CA-111  9.00 10.00   11.00 12.00 …  ・・・ 10  01000033 OP-100   30.00 31.00  32.00 33.00 11  02000123 TD-358  10.00 11.00  12.00 13.00   以下5000行ほど続きます。 <Sheet2>は得意先ごとのランク表です。 商品群は商品コードの頭2桁目と3桁目(00、01等)でランクが決まっている為、1行目に2桁の数字を入れています。   A列        B列             C列   D列   E列 … 1                            00   01    02    10  20  2  得意先コード 得意先名/商品群  AA  AB   BDB   OP TD  3  11111    あああ            S    A     C    B  C 4  11222    いいい            A   C     B    S  A 5  12333    ううう              C    S      S    A   B 6  12444    えええ            A   A      B    C   C 7  12555    おおお            B   B     C    S  B …  ・・・   横に50列ほど続きます。 <Sheet3>は入力画面です。    A列       B列      C列   D列 1   得意先コード 商品コード   ランク  単価 2   11222     01000033    得意先コードと商品コードを打ち込むとC2にランク(例だとS)が出るようにしたいのですが、 VLOOKUP($A$2,Sheet2!,A1:Z100,MATCH(C2,Sheet1!A1:A5000,C1:F1)) とすると、アルファベットは出るのですが、ランク表どおりに出ません。01と10が同じ数字として認識されてしまいますし、2桁目と3桁目を認識する関数がわからないので、ここで止まっています。 ランクが出たら、隣の単価を求める関数もついでに教えていただけたらさいわいです。 よろしくお願い致します!

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

    =IF($B$3="","",IF(ISERROR(VLOOKUP($B$3,注文管理!A$3:AE$9898,4,0)),"客注NO.を確認!",VLOOKUP($B$3,注文管理!$A$3:$AE$9898,4,0))) VLOOKUP関数を使って、上の式を作りました。 B3に入るのは5桁の数字で文字列です。注文管理のA列に5桁の数字が入っており、そこも文字列にしています。 うまくいく数字とうまくいかない数字があるのですが、なぜだかわかりません。 どこがおかしいのかおしえてください。

  • エクセルのIF関数でVLOOKUPを論理式で

    こんにちは IF関数を勉強しています、過去の質問履歴のQNo.2489708を参考にさせて頂きましたが私の思うような結果が得られないので教えていただければと思います。 ■数式が=IF(A1="","",IF(VLOOKUP(A1,B3:B5,1,FALSE)=A1,C3,D3)) ■内容ですが 第1のIFで A1はブランクで真 偽の場合次のIF関数 第2のIFで 論理式を使い、A1の値がB3~B5の値と同じ場合と表現し       真の場合C3 偽の場合D3 C3のセルにはOK D3はNGと入っています ■結果  A1に入力した値とB3~B5の数字が合えば『OK』を返してくれるのですが  それ以外の場合のD3の値『NG』を返してくれなく#N/Aを返してきます。 数式がやはり違うのかなー  ■試した事  『OK』と『NG』をセルで指定しているのでここを単純に,"OK","NG"としてみましたが結果は同じでした・・・ ■合わせて  B3~B5のセル書式設定が文字列の場合(01234などの0を先頭に表示する場合セルの書式設定を文字列にしています)は特別な関数を入れ子するのでしょうか? ■いろいろ参考書を買って確認しましたが同じようなケースは無いようです。 ■VLOOKUPを使う理由  じつは、商品毎に別シートへ台帳を作り管理しています。  例えば、『シート名お菓子』に商品コードが無い場合『シート名飲料』を見に行く様にしたいのです。  商品はなるべくコード(数字)にしているのですが、0ゼロから始まる商品コードもあるので四苦八苦考えています・・・このIFとVLOOKUPを使うと幅が広がると思い夢を描いています。その他にMATCH関数でも考えましたが上手く結果が得られず困っています、どうぞ宜しくご教授ねがいます。

  • エクセルの数字の桁数

    エクセル2000です。 3000行程のデータです。横に並べた3つのセル(A~C列)の数字をひとつのセルにまとめてD列に表示しようと思います。希望はゼロも含めて8桁の番号10036803にしたいのですが、ゼロがとれて13683になってしまいます。 なお、Dのセルには=A1&B1&C1としています。    A  B  C    D  1 1 00368 03  10036803 よろしくお願いします。

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • エクセルの「IF+VLOOKUP」に関してのよくある問題で、意味のわからない相対参照があります

    「1.セル【C18】にセル【B18】の「商品コード」に対応する「商品名」を返す数式を入力して下さい。「商品一覧」の表を参照すること。 次に、「商品コード」が入力されていない場合は、「商品名」にエラーが表示されないように数式を修正して下さい。(シートに表があり、IF+VLOOKUPを使う問題です) 2.セル【C18】の数式をもとに請求書の表を完成させて下さい」(←「【C18】の下の行も同じように、商品コードから商品名を表示させれるように完成させなさい」っていう問題です) 上記のような問題があったのですが、 数式を入力して下にオートフィルして 完成させたのですが、【問題の解答】を見た限りでは 「セル【C18】を「=IF($B18="","",VLOOKUP($B18,$H$18:$J$29,2,FALSE))」と修正する」 と書いてありました。 ですが、数式の「$B18」の部分で「列を固定にする」 意味はあるのでしょうか? 「$」はなくてもちゃんと機能してますし、 表も完成してるように思うのですが・・・ あと、これは商品コードが空白の場合にはエラーが 出ないのでいいのですが、商品コードとは関係ない 文字列も入れた場合(間違った文字列を入れた場合)に エラーがでないようにする事もできますでしょうか?

専門家に質問してみよう