- ベストアンサー
エクセルのVLOOKUP関数で…(複数条件?の抽出)
●シート2、A列に部品正式名称、B列に部品略称の一覧表(部品の種類は約500点) ●シート3、A列に略称、B,C,D,E,F,G列と続けて寸法などの詳細を記した一覧表 があります。 ●シート1に検索一覧表として、B列(B3~B8)は項目、セルC3~C8にVLOOKUPでシート3の情報が抽出されるようにしてあります。 C1で略称を入力し抽出するのはOKなのですが、正式名称で入力しても同じようにシート3の情報を抽出するようにしたいです。 (IFを使って思いつく関数を組合わせてみたりしたのですが、うまくいきませんでした(TT) できたら関数で何か良い方法ありますでしょうか? 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C1=正式名称でC3移行にシート3のB~G列ということは、C2=略称なんでしょうか? C2=IF(COUNTIF(シート2!$A:$A,C$1),VLOOKUP(C$1,シート2!$A:$B,2,FALSE)) C3=IF(COUNTIF(シート3!$A:$A,C$2),VLOOKUP(C$2,シート3!$A:$G,ROW()-1,FALSE)) でC3をC8までコピーする。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
C1に正式名称か略称を入れる C2に =IF(ISERROR(MATCH(C1,Sheet2!$A$1:$A$5,0)),VLOOKUP(C1,Sheet3!$A$1:$B5,2,FALSE),INDEX(Sheet3!$A$1:$B5,MATCH(C1,Sheet2!$A$1:$A$5,0),2)) と入れる。 ーー その前に下記シートがあるとする。 Sheet2に アリナミン アリナ パブロン パブロ 正露丸 露丸 ピロエース エース Sheet3に アリナ 12 パブロ 23 露丸 45 エース 55 ーー 結果 正露丸でも露丸でもC1に入れると、C2に45と出ます。 Sheet2とSheet3は同じ順序としていますが、そうでないなら 後の方のMATCH関数をVLOOKUPに置き換えるとできるでしょう。 複数ある別の列を採るときは MATCH(C1,Sheet2!$A$1:$A$5,0),2))の2の部分を3などに変えます。
お礼
出社してから早速やってみたのですが、私の当てはめ方が良くなかったのか、正式名称に1つに対し略称が1つついているわけではない事が原因か、正式名称を入力した場合にエラーが出てしまいました。関数の意味をもう一度見直して、やってみようと思います。 とりあえずは、#2さんの回答をもとに解決致しましたので、ここで締め切らせていただきます。 回答、ありがとうございました^^
- TK1961
- ベストアンサー率35% (16/45)
ここにシート4を作ってはいけない理由が思いつかないので、私ならば「シート3のデータ」と「シート3のデータの略称部分を正式名称に置き換えたデータ」の2つを混ぜた「シート4」を新たに作り、そのシート4からデータを拾うようにします。 文面から、関数の扱いにも通じておられるようなので、「シート2」と「シート3」から、「シート4」を作るのにも1分とかからないでしょうから、手間もほとんどかかりませんよね。
お礼
た、確かに…一覧表を作るのは好きな方ですし、シート4を作成するのも手ですが、新規の部品を追加するときのメンテナンス的な事を考えると、できれば表は増やしたくないのです^^;その事を考えて表を作成するには、私ではちょっと1分では無理そうです(TT) 別の方法でもう少し勉強して、無理でしたらTK1961さんの方法で試してみます。 回答ありがとうございました^^
お礼
回答ありがとうございます^^ mshr1962さんするどいですね!!省略してましたが、C2=略称です。 C1で正式名称を入力して、C1自体を略称に変換するのは無理と考えたので、C1に入力した部品名を正式名称でも略称でもC2に略称で表すようにして、C2を検索させるようにすれば良いのではないか、と言うところまでは思いついていたのです…。 mshr1962さんの方法を試してみました。 C2の方ですが、 >C2=IF(COUNTIF(シート2!$A:$A,C$1),VLOOKUP(C$1,シート2!$A:$B,2,FALSE)) ですと、略称を入力した場合FALSEとなってしまったので C2=IF(COUNTIF(シート2!$A:$A,C$1),VLOOKUP(C$1,シート2!$A:$B,2,FALSE),C$2) ,C$2をつけたし解決いたしました^^ C3~C8ですが、 シート3に情報がないものには"×"を表すようにしたかったので C3=IF(ISNA(VLOOKUP($C$2,シート3!$A:$G,2,FALSE)),"×",VLOOKUP($C$2,シート3!$A:$G,2,FALSE)) として、C4~C8まではVLOOKUPの列番号のとこを変えて対応しました。 やりたい事ができてスッキリしました! ありがとうございました^^
補足
>C1=正式名称 >C2=略称 ではなく、正しくは C1=正式名称OR名称 C2=C1で入力したものをすべて略称で表す です。mshr1962さんの回答からヒントを得て、無事解決する事ができました^^