- ベストアンサー
複数条件でのVlookupができるのか?
- Vlookupを複数条件で使用できるかどうかについて調べています。
- 例えば、両ファイルで名前と電話番号が一致するデータのみを抽出して、Newファイルの会員番号を取得する方法が知りたいです。
- Dget関数は調査したが、詳細が分からず、Vlookupなどを使用して解決することを望んでいます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>E列が画像にないのですが。。 D列の右の列がE列。。。 >エクセルに詳しくないため、もう少し教えていただけますか? http://office.microsoft.com/ja-jp/training/RZ006107930.aspx >>=IF(OR(E2="",F2=""),"", 単純なエラー処理 >>IF(COUNT(1/(($A$2:$A$10=E2)*($B$2:$B$10=F2)))=0,"", (この部分は回答直後にイマイチな考えだと思ったけど、) 名前と電話番号が合致すると数値となるので、数値がないなら空白にする >>INDEX($C$2:$C$10,MATCH(1,($A$2:$A$10=E2)*($B$2:$B$10=F2),0)))) 両方が合致すれば1を返すので、その最初の1の行番号をMATCHで返すことで、INDEXで対応する会員番号を返す。 配列数式講座 http://pc.nikkeibp.co.jp/pc21/special/hr/ >下へオートフィル 選択セルの右下にマウスポインタを合わせた時に出る黒十字(フィルハンドル)を下方へドラッグすること。 一応、簡単な説明はしましたが、オートフィルという言葉自体がわからないほどの初心者なら keithinさんの最初の回答の案(前半のVLOOK案)をお勧めします。 作業列は非表示にしておけばよいし、配列案より計算速度も格段に速い。 当方が作る場合も作業列を使う。ただ、気分的に作業列は端におきたいのでINDEXとMATCH関数を使うだろう。 http://www.moug.net/learning/exjob/exjob006-1.html
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
ん??? >何をしている式でしょうか? 何をしてるって,そりゃ勿論アナタがご質問された「複数条件で抽出して値を取ってくる」をやってるにきまってるじゃないですか。関係ない雑談をしてるワケじゃありません。 回答は(SUMIFS関数やSUMPRODUCT関数で出来ますよ,とかじゃなく)一応コピーだけすれば計算できるようにしておきましたが,数式が難しくて目が回ってしまい全然先に進めないのでしたら,最初の最初に回答した方法で,アナタのご存じなVLOOKUP関数を使ってコタエを引っ張ってくる手順を強くお薦めします。
お礼
回答ありがとうございます。 エクセルの式の理解に戸惑っていました。 勉強します。 ありがとうございました。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
keithinさんの案の前半をお勧めします。 その上で半分遊び案(重複がある時、上の行優先) G2セルに =IF(OR(E2="",F2=""),"", IF(COUNT(1/(($A$2:$A$10=E2)*($B$2:$B$10=F2)))=0,"", INDEX($C$2:$C$10,MATCH(1,($A$2:$A$10=E2)*($B$2:$B$10=F2),0)))) [Ctrl]+[Shift] +[Enter] で確定、配列数式です({}で囲まれる) 下へオートフィル E:F列を切り取り、別シートへ貼り付け
お礼
回答ありがとうございます。 式の意味とこれは何をしているのでしょうか? E列が画像にないのですが。。 エクセルに詳しくないため、もう少し教えていただけますか? あと >下へオートフィル とありますが、、これはろういうことでしょうか。。。 教えていただければ幸いです。
- keithin
- ベストアンサー率66% (5278/7941)
いいえ。VLOOKUP関数はひとつの検索値でしか値を持ってこれません。 なので違う関数を使ったり違う方法で,欲しい結果を得られるように工夫します。(もちろん,「諦める」という選択肢もありますが) 簡単にできることその1:検索条件を「1つ」にしてしまう Sheet1:元リスト A列 B列 C列 D列 名前 電話 名前+電話 会員番号 佐藤 1234 佐藤_1234 21 上野 5678 上野_5678 22 遠藤 2231 遠藤_2231 23 : C2: =A2&"_"&B2 以下コピー こういった具合に「名前+電話」で一つのデータを作ってしまえば,「名前+電話」でいつものVLOOKUP関数も簡単に利用できます。 検索シート A列 B列 C列 名前 電話 会員番号 上野 5678 =VLOOKUP(A2&"_"&B2,Sheet1!C:D,2,FALSE) VLOOKUP以外の難しい方法:ご利用のエクセルのバージョンに応じて,また具体的なデータの内容に応じて,VLOOKUPではなく違う関数を利用します。 #ご利用のソフトのバージョンに応じて,出来ること出来ないこと具体的な操作の手順が変わる場合があります。 ご相談投稿時には,ご利用のソフト名は当然として,ご利用のソフトのバージョンまでしっかり明記することを憶えてください。 ★会員番号がご質問で書かれているように「数値」である場合 ○Excel2007以降を利用している場合 上述例検索シートのC2: =SUMIFS(Sheet1!D:D,Sheet1!A:A,A2,Sheet1!B:B,B2) 応用: =IF(COUNTIFS(Sheet1!A:A,A2,Sheet1!B:B,B2)=1,SUMIFS(上述の通り),"") ★会員番号が数値ではなく「文字列」である場合 C2: =IF(SUMPRODUCT((COUNTA(A2:B2)=2)*(Sheet1!A$1:A$10=A2)*(Sheet1!B$1:B$10=B2)),INDEX(Sheet1!D:D,SUMPRODUCT((Sheet1!A$1:A$10=A2)*(Sheet1!B$1:B$10=B2)*ROW(Sheet1!D$1:D$10))),"")
お礼
回答ありがとうございます。 エクセルのバージョンは2010です。 後半の =================================== ○Excel2007以降を利用している場合 上述例検索シートのC2: =SUMIFS(Sheet1!D:D,Sheet1!A:A,A2,Sheet1!B:B,B2) 応用: =IF(COUNTIFS(Sheet1!A:A,A2,Sheet1!B:B,B2)=1,SUMIFS(上述の通り),"") ★会員番号が数値ではなく「文字列」である場合 C2: =IF(SUMPRODUCT((COUNTA(A2:B2)=2)*(Sheet1!A$1:A$10=A2)*(Sheet1!B$1:B$10=B2)),INDEX(Sheet1!D:D,SUMPRODUCT((Sheet1!A$1:A$10=A2)*(Sheet1!B$1:B$10=B2)*ROW(Sheet1!D$1:D$10))),"") ====================================================================== は何をしている式でしょうか? 教えていただいければ幸いです。
お礼
たびたびの回答ありがとうございました。 勉強します。