Excelで2つのキーと合致するデータを取得する方法

このQ&Aのポイント
  • Excelで2つのキーと合致するデータを取得する方法について、具体的な手順と注意点を解説します。
  • Excelの表Aと表Bのキー1とキー2が合致するデータを取得する方法を紹介します。
  • ExcelのMATCH関数を使って、表Aと表Bのキー1とキー2が合致する行のデータを取得する方法について説明します。
回答を見る
  • ベストアンサー

Excelで2つのキーと合致するデータを取得するには?

Excelで以下の実現方法にどん詰まりしています… 1つのシート内にAとBの表があります。 <表A> コード1 コード2 100   8 100   2 200   3 <表B> コード1 コード2 金額 100   1    1000 100   2    2000 100   5    4000 100   8    6000 150   1    1500 200   3    3200 表Aのコード1、コード2と表Bのコード1、コード2が合致する 表Bの金額を取得したいのですが、2つのキーに合致させるという方法が イマイチ実現できません。一度にできるものなのでしょうか? MATCHでコード1の存在の有無と行番号を取得し、取得した行番号から コード2をMATCHして…でも、コード2を検索するには範囲がわからないとダメだよな… …などなど、ぐるぐる中です… よろしくお願いします… ※コード1、2ともにソートされています。

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

  • ベストアンサー
noname#52504
noname#52504
回答No.1

例えば、 「コード1が100で、コード2が2の場合 ⇒ 2000を返す」 ということですよね。 コード1とコード2を繋いだ値について検索するのが手っ取り早いと思います。 例えば、<表A>がA,B列,<表B>がE,F,G列にあるとして、 A列とB列の値を結合した値(ex.100_8)を、 E列とF列の値を結合した配列(ex.{100_1,100_2,100_5,…,200_3}から探して、 ヒットした行のG列の値を返す。 イ案 =INDEX($G$1:$G$99,MATCH(A1&"_"&B1,INDEX($E$1:$E$99&"_"&$F$1:$F$99,),0)) Excel2003で動作確認済。 ---------------------------------------------------------------------------- 蛇足 この手の数式はいろんな書き方ができます。 基本的には趣味や慣れの問題で、どれが良いということは特にありませんが、 一応ご参考まで。 ロ案 =INDEX($G$1:$G$99,INDEX(MATCH(A1&"_"&B1,$E$1:$E$99&"_"&$F$1:$F$99,0),))  ※配列処理をさせるためのダミー関数INDEX(~,)はMATCHの外でもいい。 ハ案 =INDEX($G$1:$G$99,SUMPRODUCT(MATCH(A1&"_"&B1,$E$1:$E$99&"_"&$F$1:$F$99,0)))  ※INDEXよりSUMPRODUCTの方が好きという人も多いみたい。 二案 =INDEX($G$1:$G$99,MATCH(A1&"_"&B1,$E$1:$E$99&"_"&$F$1:$F$99,0))  ※Ctrl+Shift+Enterで配列数式として入力する場合はダミーの関数はいらない ホ案 =OFFSET($G$1,SUMPRODUCT(MATCH(1,(A1=$E$1:$E$99)*(B1=$F$1:$F$99),0))-1,0)  ※別案:A列とE列,B列とF列を直接比較して論理演算を行う  ※INDEXよりOFFSETの方が好きという人も結構いるみたい。 などなど。

Chappy02
質問者

お礼

お礼、遅れてすみません! VBAに逃げようかと思っていたところです。 イ案でうまく行きました。 上の例の書き方が悪かったのですが、 「表A」のコード1とコード2を結合して表Bを参照しようにも 実際の「表B」のコード1とコード2の間に1列挟まっていて VLOOKUPを使ったやり方でうまく参照できませんでした。 普段、Excelの計算式は"SUM"など、ごく標準的な計算しか使わないもので… ありがとうございました(´∀`)

関連するQ&A

  • ある範囲内で最も下にあるデータ入りのセルアドレスを取得するマクロ

    A1:B100の範囲において、 データが入った最も下にあるセルの行番号を取得するコードを組みたいです。 A列には1,3,5行目に数値が、 B列には2,4,6行目に数値が入っている状態では、一番下はB6なので「6」を取得するコードです。 A列でCtrl + ↓を何度も実行し、行番号が100を超える1回前のアドレスを取得。 B列でも同じ操作でアドレスを取得。 二つのアドレスの行番号を比較して大きいほうが最も下の行番号、 などというコードを考えましたが(思いついただけで組めてません)、 より簡単な方法があれば教えてください。

  • EXCEL VBA 条件に合致しない行を削除したい

    超初心者です。どうか教えてください・・・m(_ _)m A列   B列   ・・・・・ 1234567  2345678 9876543  8765432  ・    ・  ・    ・ といった、表(数千行規模)があります。 A列とB列には7桁の数字があります。 A列とB列には途中ブランクのセルもあります。 A列またはB列のどちらかにも、 複数の範囲条件(数字)に合致しない行を削除したいです。 A列またはB列のどちらかに合致すればその行を残します。 複数の範囲条件(数字) (例)  1000000~1000009  2000100~2000199     ・     ・   十数個あります。 何卒、宜しくお願い致します。・・・m(_ _)m

  • Excel 複数の項目合致するデータを抽出したい

    是非、よろしくお願いいたします。 以下の状況です。 sheet1には A、B、C、Dという4列があります。データは1000行くらいです。 sheet2には A、B、C、Eという4列があります。データは2000行くらいです。 この状況で、sheet1のD列の右に新しい列を作り、 「sheet1の(例えば)A1、B1、C1と合致する行のsheet2のE列データ」を、 sheet2のABC列範囲を検索して抽出したいのです。 項目が一つであればvlookup関数でできるものを「複数項目に合致」のため上手くいきません。 この3列のデータを結合して一つにしてみましたが、結合後のデータが16桁以上のため末尾が「0」になってしまい、正確に検索できません。 何か上記を可能にする方法はないでしょうか? よろしくお願いいたします。

  • EXCELでこんな集計はどうするのでしょうか

    商品管理の表で以下のようになっています。 A1   B1    C1     D1    E1 担当者 分類番号 商品コード 整理番号 以下各月毎の売り上げ そしてこの表は1500行程度あり、B列、C列でソートしています。 この表をB列の分類番号毎、C列の商品コード毎で各月の売上合計を上記の表のシートとは別のシートに集計したいのですが、どのようにしたらよいのでしょうか。シートをコピーして集計するのはできるのですが、そうしたら容量が(サイズが)大きくなりすぎるため、できれば避けたいと思っています。

  • 2つのシートから合致するデータの抽出方法

    Excelについて質問させて頂きます。 二つのシートにある表からA列B列が合致する行だけを表示させたいと思います。 例;A列→商品名、B列→商品コード、C列以降→在庫数など。 シート1には、現在も販売されているもの。 シート2には、過去の分も販売されていたもの。 があります。 どのような解決策がありますか? データベースには10000件以上のデータがあるので一つずつ照合していけません。 どなたかExcelの関数に詳しいかたがいらっしゃいましたらご教授頂けましたら幸いです。 宜しくお願い致します。

  • 複数の検索値から任意のデータを抽出する方法

    Excelの質問です。 Sheet1には、1行1件のコード、地域、金額の表があります。 A列のコードは、同じコードはひとかたまりになっていますが、 同じコードが2行ある場合や、1行またはそれ以上ある場合と決まっていません(最大6行)。 また、コードの順も昇順・降順になっていません。 Sheet2には、A列にコードだけが入力してあり、コードをキーにして、 Sheet1から地域と金額を自動表示したいのですが、 MATCHやINDEX関数を組み合わせたりしたのですが、うまくいきません。 関数式をお教えください。 <Sheet1> A B C →列番号です。 コード 地域 金額 56789 東京 100 56789 大阪 50 12345 大阪 400 12345 神奈川 200 12345 東京 1000 22222 大阪 300 22222 神奈川 400 22222 東京 100 ・・・・・つづく <Sheet2> A B C 12345 大阪 400 →B列とC列を数式で自動表示したい 神奈川 200 東京 1000 56789 東京 100 大阪 50 22222 ・・・・・つづく

  • EXCELの 編集 検索キーを使わず 検索したい

    EXCELの 編集 検索キーを使わず シート上で検索文字を指定して 検索された 全ての セルを表示したい。  第1表 CODEー名前表 CODEを探す A列 B列 C列 D列 1行 CODE 名前 CODE 2行 1001 あいうえお 1001 3行 1002 ああいうえ 1002 4行 1003 おあいうえ 1003 5行 1004 えおいうえ 1004 6行 1005 うえおあい 1005 7行 1006 うえああい 1006 第1表 CODEー名前表 から”あ”の含まれる全ての 名前 CODEを 第2表みたいに 作りたいのです 第2表 CODEを探す A列 B列 C列 D列 1行 検索する 名前 *あ* 2行 3行 検索された 名前 検索された CODE 4行 あいうえお 1001 5行 ああいうえ 1002 6行 おあいうえ 1003 7行 うえおあい 1005 8行 うえああい 1006 マクロを使わない方法で お願いします。 1:検索された 文字の足し算 2:文字の足し算をするごとに 1行増やす 3:改列 4:SUMPRODUCTで 文字の足し算は出来ますか?

  • Exel VBA 別シートから該当データを取得する

    お世話になります。 エクセルVBAで質問です。 以下の日付表というシートがあります A列に日付、B列に商品番号が入力してあります。C列のコードは未入力です。 A列     B列     C列       日付    対象商品番号  コード 2020/6/1  U-1325-L   2020/6/2  R-134256 2020/6/3  L-456632 ・ ・ ・ 2020/6/30  W-724789 また、一覧表という別のシートには、A列に商品番号と、B列からコードが何百件も入力されています。 (1行目に限っては、A1だけ商品番号の項目でB列からは日付です) A列     B列     C列     D列  AE列 商品番号  2020/6/1  2020/6/2  2020/6/3・・・・ 2020/6/30 R-134256  123123   456456   741741 ・・・・ 753753 U-1325-L  789879   963963   852852 ・・・・ 951951 ・ ・ ・ やりたいことは 日付表のC列のコード欄に、一覧表から商品番号と日付が一致するコードを貼り付けしたいのです。 現状、目視で全入力しているので、マクロで一度に処理を希望します。 または、マッチしたら一覧表側のコードセルにマークつける方法でもかまいません。 と、言ってみたものの、Google検索しても、どうやって調べればいいのかが、わかりませんでした。 マクロの基本事項は本で学びましたが、条件が複数になってくるとよく理解できません。 どうぞよろしくお願いします。

  • エクセルで合致する数字の検索

    エクセルで合致する数字を素早く検索したいです。 例えば、A2~A50000に重複していない数字(桁数色々)が入っている場合、B1にA列の数字をどれか1つ入力すると、その一致する一行だけ表示するような方法はありますか? フィルタを使うには検索数が多すぎて大変なので、このような検索ができるか教えて下さい。

  • EXCELの行番号取得について

    A列に●がランダムに入っている状態で、1番目に●が入っている行番号、2番目に●が入っている行番号、3番目・4番目・・・の行番号を関数で取得したいのですが、良い方法はありますでしょうか。ご教授下さい。(バージョンはEXCEL2016です) よろしくお願いします。   A列    B列 1        4  ← 1番目の●の行番号 2        6  ← 2番目の●の行番号 3        9  ← 3番目の●の行番号 4  ● 5 6  ● 7 8 9  ●