Excel複数条件からのデータ抽出方法と注意点

このQ&Aのポイント
  • Excelのデータ抽出方法について、オートフィルタではなく入力規制とプルダウンリストを使用する方法を紹介します。
  • ホテル、プラン、部屋の選択を連動させるために、入力規制を使ってプルダウンリストを作成します。
  • データの絞り込み後は、該当する価格を自動で表示させることができます。
回答を見る
  • ベストアンサー

Excel 複数条件からのデータ抽出

Excel 複数条件からのデータ抽出 Excelの関数について質問です。 色々と調べたのですが、近いようで遠いものしか見つけることができませんでしたので、 我慢できず質問させていただきます。 下記のようなデータがあったとします。 ----------------------------- ホテル ホテル1 プラン1 部屋1 価格 ホテル1 プラン2 部屋2 価格 ホテル1 プラン3 部屋3 価格 ホテル1 プラン3 部屋4 価格 ホテル2 プラン1 部屋5 価格 ホテル2 プラン2 部屋6 価格 ホテル2 プラン2 部屋7 価格 ホテル2 プラン2 部屋8 価格 ・ ・ ・ ----------------------------- このデータから、下記の処理がしたいです。 ・オートフィルタでソートして絞るのではなく、  別セルに入力規制などで、プルダウンから選ぶ方式で、  各プランの比較を行いたい。 (1)まずは、別シートのA1セルに、 入力規制を設け、ホテルを選択できるようにします。 (2)次に、A2セルでプランを同じ方法で選択するようにしたいのですが、 上記のデータでホテル1にはプラン1~3が該当しますが、 ホテル2はプラン1と2のみになってます。 このとき、(1)でホテルを選択した時点で、 自動でプラン選択リストをそのホテルに合わせたものにしたいです。 (3)次に、A3セルで同じように部屋を選択するのですが、(2)と同じように、 (1)と(2)で選んだホテル・プラン向けのリストに自動的になるようにしたいです。 (4)最後に、A4セルに該当の価格を自動で表示させたいです。 可能でしょうか。 実際はホテルの数が全部で5つ、 プランの数が5つ、 部屋のタイプは26種類、 価格はすべて異なります。 よろしくお願いいたします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

回答番号:ANo.3の続きです。  次に、A1セルの場合と同様の操作で、A2セルの入力規則に次の数式を設定して下さい。 =INDIRECT("Sheet3!H2:H"&COUNTIF(INDIRECT("Sheet3!H:H"),"><"))  次に、同様の操作でA3セルの入力規則に次の数式を設定して下さい。 =INDIRECT("Sheet3!I2:I"&COUNTIF(INDIRECT("Sheet3!I:I"),"><"))  最後に、Sheet1のA4セルに次の数式を入力して下さい。(入力規則ではありません) =SUMPRODUCT((OFFSET(Sheet2!$B$1,1,0,COUNTIF(Sheet2!$B:$B,"><"))=Sheet1!$A$1)*(OFFSET(Sheet2!$C$1,1,0,COUNTIF(Sheet2!$B:$B,"><"))=Sheet1!$A$2)*(OFFSET(Sheet2!$D$1,1,0,COUNTIF(Sheet2!$B:$B,"><"))=Sheet1!$A$3)*OFFSET(Sheet2!$E$1,1,0,COUNTIF(Sheet2!$B:$B,"><")))  それから、入力規則で新たな入力に制限を加えたとしても、既にSheet1のA2セルやA3セルにプランや部屋を入力済みの場合、A1セルに別のホテルを入力すると、そのホテルには存在しないプランや部屋が入力されている状態になります。  これでは紛らわしいため、条件付き書式を応用して、ホテル名とプラン名や部屋番号の間に、整合性がない場合には、A2セルやA3セルの表示が消えた様に見せかけます。 Sheet1のA2セルを選択   ↓ メニューの[書式]ボタンをクリック   ↓ 現れた選択肢の中にある[条件付き書式]をクリック   ↓ 現れた「条件付き書式の設定」ウィンドウの中の左端にある欄をクリックして、現れた選択肢の内の「数式が」をクリック   ↓ 「条件付き書式の設定」ウィンドウの中の右側にある欄をクリックして次の様な数式を入力 =COUNTIF(INDIRECT("Sheet3!H:H"),A2)=0   ↓ 「条件付き書式の設定」ウィンドウの中の[書式]ボタンをクリック   ↓ 現れた「セルの書式の設定」ウィンドウの「フォント」タグをクリック   ↓ 「色」欄をクリック   ↓ 白色をクリック   ↓ 「セルの書式の設定」ウィンドウの中の[OK]ボタンをクリック   ↓ 「条件付き書式の設定」ウィンドウの中の[OK]ボタンをクリック  同様の操作で、Sheet1のA3セルにも、条件付き書式に次の数式を設定して下さい。 =COUNTIF(INDIRECT("Sheet3!I:I"),A3)=0  以上で完成です。

その他の回答 (4)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.5

> >部屋と価格の対応表 > こちら、同じ部屋の名前で、価格が異なるものがあるのですが、 あなたの例では、部屋名はすべて異なっていたので、このような回答をしました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、Sheet2の B1セルに「ホテル名」、 C1セルに「プラン名」、 D1セルに「部屋番号」、 E1セルに「価格」、 という具合に項目名が並んでいて(B1、C1、D1は空欄にはしないで下さい)、Sheet2の2行目から下方に向かって、 B列に各ホテルの名称データ、 C列に各プランの名称データ、 D列に各部屋の番号のデータ、 E列に価格のデータ、 という具合に各データが入力されていて、 ドロップダウンリストでSheet1の A1セルにホテル名、 A2セルにプラン名、 A3セルに部屋番号を入力すると、 Sheet1のA4セルに価格が自動的に表示されるものとします。  ここでは、Sheet3のB列、C列、D列、G列、H列、I列を作業列として使用する方法を述べます。  又、この方法では、Sheet2に入力されているデータは、ホテル毎にまとまって入力されていなくても良く、(例えば上から、「ホテル2のプラン3」、「ホテル5のプラン7」、「ホテル3のプラン5」、「ホテル1のプラン1」、「ホテル4のプラン6」、「ホテル2のプラン2」の順番でも可) 異なるホテルに、同名のプランや部屋番号が存在していても、正しい価格が表示されます。  まず、Sheet2の B1セルとG1セルに「ホテル」、 C1セルとH1セルに「プラン」、 D1セルとI1セルに「部屋」、 と入力して下さい。(G1、H1、I1は空欄にはしないで下さい)  次に、B2セルに次の数式を入力して下さい。 =IF(Sheet2!$B2="","",IF(COUNTIF(Sheet2!$B1:$B2,Sheet2!$B2)=1,COUNT($B$1:$B1)+1,""))  次に、C2セルに次の数式を入力して下さい。 =IF(AND(Sheet2!$B2=Sheet1!$A$1,SUMPRODUCT((Sheet2!$B$1:$B1&Sheet2!$C$1:$C1=Sheet1!$A$1&Sheet2!$C2)*1)=0),COUNT(C$1:C1)+1,"")  次に、D2セルに次の数式を入力して下さい。 =IF(AND(Sheet2!$B2=Sheet1!$A$1,Sheet2!$C2=Sheet1!$A$2,SUMPRODUCT((Sheet2!$B$1:$B1&Sheet2!$C$1:$C1&Sheet2!$D$1:$D1=Sheet1!$A$1&Sheet1!$A$2&Sheet2!$D2)*1)=0),COUNT(D$1:D1)+1,"")  そして、Sheet3のB2~D2の範囲をコピーして、同じ列の3行目以下に、Sheet2のリストの行数を上回るのに充分な回数だけ貼り付けて下さい。  それから、Sheet3のG2セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT($B:$B),"",INDEX(Sheet2!$B:$B,MATCH(ROWS($1:1),$B:$B)))  次に、H2セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT($C:$C),"",INDEX(Sheet2!$C:$C,MATCH(ROWS($1:1),$C:$C)))  次に、I2セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT($D:$D),"",INDEX(Sheet2!$D:$D,MATCH(ROWS($1:1),$D:$D)))  そして、Sheet3のG2~I2の範囲をコピーして、同じ列の3行目以下に、最も部屋数の多いプランにおける部屋数を、上回るのに充分な回数だけ貼り付けて下さい。  次に、Sheet1のA1セルを選択してから、次の操作を行って下さい。 メニューの[データ]をクリック   ↓ 選択肢の[入力規則]をクリック   ↓ 現れた「データの入力規則」ウィンドウの「設定」タグをクリック   ↓ 「入力値の種類」欄をクリック   ↓ 現れた選択肢の中の「リスト」をクリック   ↓ 現れた「元の値」欄の中に以下の数式を入力 =INDIRECT("Sheet3!G2:G"&COUNTIF(INDIRECT("Sheet3!G:G"),"><"))   ↓ 「データの入力規則」ウィンドウの[OK]ボタンをクリック ※回答欄に入力可能な文字数を超えたため、少々規則違反になりますが、後半は次の回答に掲載させて頂きます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 入力規則のリスト表示を3段階で行いたい!ということですよね? 一応そういうことだとして・・・ 小さくて見にくいかもしれませんが、↓の画像で説明します。 一例です。 右側のSheet2にリスト表示する表を作成しています。 この表さえきっちりできればあとは簡単だと思います。 2段階までなら簡単ですが、今回のように3段階となると表を作成するのも工夫が必要だと思います。 結局最後の部屋名によって値段が変わってくるのでしょうから、すべての部屋の価格を表示しておく必要があると思います。 Sheet2のA1~C5がSheet1のB1セルの入力規則に利用するための表です。 当方使用のExcel2003の場合ですが Sheet2のA1~A4セルを範囲指定 → メニュー → 挿入 → 名前 → 作成 → 上端行 を選択し、OK これでA2~A4セルが「ホテル1」と名前定義されます。 同様に黄色部分(ホテル1~ホテル3)を名前定義 同様にA7~D7セルを範囲指定 → (中略)→ 作成 → 「左端列」を選択 → OK これでB7~D7セルが「ホテル1プラン1」と名前定義されます。 これをすべての行で名前定義しておきます。 そして、F列~I列にすべての部屋名の価格を「ホテル名」「プラン名」「部屋名」とともに、全てを入力します。 これで準備完了です。 Sheet1のB1セルをアクティブにして メニュー → データ → 入力規則 → リスト → 「元の値」の欄に =ホテル としてOK B2セルも同様に入力規則のリストから「元の値」の欄に =INDIRECT(B1) としてOK B3セルも入力規則のリスト → 「元の値」の欄に =INDIRECT(B1&B2) としてOK これでB1 → B2 → B3 とリストで選択したものが徐々に絞られてリスト候補になるはずです。 最後に画像では見えていませんが、B4セルに =IF(COUNTBLANK(B1:B3),"",SUMPRODUCT((Sheet2!F2:F100=B1)*(Sheet2!G2:G100=B2)*(Sheet2!H2:H100=B3)*(Sheet2!I2:I100))) (F~I列の100行目まで対応できるようにしています) という数式を入れ、完了です。 これでB1~B3セルを選択すればSheet2のI列の価格が表示されると思います。 この程度しか思いつきませんが、Sheet2の表の作成方法を工夫すればもう少し簡単になるかもしれません。 どうも長々と失礼しました。m(__)m

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

あなたがやりたいことを実現させるためには、例に挙げたデータであれば、 ホテル1のときのプランのリスト ホテル2のときのプランのリスト ホテル1でプラン1のときの部屋のリスト ホテル1でプラン2のときの部屋のリスト ホテル1でプラン3のときの部屋のリスト ホテル2でプラン1のときの部屋のリスト ホテル2でプラン2のときの部屋のリスト 部屋と価格の対応表 というものをあらかじめ作って、リストに名前を付けておく必要があります。 その上で、INDIRECT関数を使って、入力規則を利用します。 あらかじめリストを作って名前を付ける、という作業を手作業でおこなうかVBAマクロでおこなうか、の選択肢はありますが。 このようなリストをあらかじめ作らずに、例に挙げたデータから直接、重複の無い選択リストにするのは、無理だと思います。 私はExcelの機能をすべて把握していないので、絶対に無理だとは断言できませんが。 私なら、素直にオートフィルタ機能を利用しますね。 オートフィルタを使えば、絞っていく途中で価格を見ながら選択肢を選ぶこともできますし。 なぜ、オートフィルタを使いたくないのでしょうか?

freemason5
質問者

補足

ありがとうございます。 あまりExcelが詳しくないため、疑問に思ったのですが、 >部屋と価格の対応表 こちら、同じ部屋の名前で、価格が異なるものがあるのですが、 (実際にはホテルもプランも違う) このまま作成しても意味を成すものでしょうか。。 オートフィルタを使いたくない理由といたしましては、 具体的に言いますと、今回「プラン」で旅行にいくか、ただの「宿泊費にオプションを追加」して行くかで悩んでいて、それをA列とB列でそれぞれ比較しながら選択を進めていきたいのです。。 他に良い方法があれば、、是非ご紹介いただけますと幸いです。

関連するQ&A

  • 複数条件による複数判定

    excelにて、複数条件による複数判定をしたいのですが、  A1セルに"A"又は"B"又は"C" と入力された場合は  A2セルで入力規制リストによりB1~B5を選択可。  A1セルに"D"又は"E"又は"F" と入力された場合は  A2セルで入力規制リストによりB6~B10を選択可。 といった関数が組めずに困っています。 どうぞ宜しくご教授願います。

  • エクセルでデータ→集計?入力規制?

    エクセル2003です。A1のセルに、データ→入力規制→リスト→元の値のところに、りんご・バナナ・みかん・ぶどう等を選択して使用しておりますが、B1のセルに、金額まで自動で表示したい場合はどうすればよいですか?例えば、りんごを選択するとB1に100・バナナは200など。

  • エクセルで条件に合わせて複数データを抽出したい

    シート1に基本データ(基データ)があり、シート2のセル内に条件を入れて、該当のデータをシート1から引っ張りたい。 具体的には、シート1に基本データ  ナンバ- 1 1 2 2 2 3 4 4 4  該当データ A B C D E F G H I シート2に 条件内容 1を入れてA B (複数データ)      2を入れてC D E       3を入れてF -----と、こんな具合になりたいのですが?   VLOOKUP は複数の抽出なので駄目でした。   

  • Excelで複数の条件でデータを抽出したいのですが上手くいきません(ToT)

    Excelで複数の条件でデータを抽出したいのですが、どうしても上手くいかず、質問させていただきました。 ナガシマスパーランド ナガシマスパーランド(三重県) ナガシマスパーランド(三重 東京ディズニーランド 東京ディズニーランド(千葉県) 東京ディズニーランド(千葉 ハウステンボス ハウステンボス(長崎県) ハウステンボス(長崎 ・ ・ ・ といったデータがあるのですが、この中から、 ナガシマスパーランド(三重県) 東京ディズニーランド(千葉県) ハウステンボス(長崎県) と、県名が「()」(←半角カッコの始めと終わり)で囲まれているデータのみを抽出し、別の行にそれらのデータを貼り付けたいのですが、 下記URL↓ http://dreamy.boy.jp/tec3_16.htm のやり方等を試しても、どうしうてもうまくいきません(ToT) (「該当なし」と判断されてしまうのでしょうか、検索条件範囲に項目名と「(」と「)」を含むセル範囲を選択しても、結果は、一つもデータが表示されない状態が返されてしまいます。) 「(」と「)」の2つの文字列を含むデータのみを抽出するには、どうすればよいのでしょうか? 関数を使えばいいのでしょうか?

  • エクセルの条件に合うデーターを抽出する関数、

    エクセルのリスト1の住所録の情報から、リスト2に、東京都の人のデータのみを抽出する関数、また、何も記載がないセルは、そのままにしておく。

  • 下記のようにExcelのSheet1にデータが入力されているとします。

    下記のようにExcelのSheet1にデータが入力されているとします。 (セルは「」で区切ります。)※添付ファイル参照 ----------------------------- A、あ、1、a、2300 A、あ、2、b、2500 A、い、3、c、2300 B、あ、4、d、2900 B、い、5、e、3100 ----------------------------- ※左から、列名:種別1、種別2、製品コード、製品名、価格とします。 このリストを使用して、別シートに下記のような仕組みを作成したいです。 ---------------------------- 種別1選択、種別2選択、製品名選択 ■■この行にはリストボックスを作成し、     それぞれをリストから選択できるようにします。(添付ファイル参照)■■ ■■その下に、製品コードと価格を表示させたいです。■■ ----------------------------- 実現可能でしょうか。。。 すみません、教えてください。

  • エクセルのデータ抽出

    会社で注文のあった業者のリストをエクセルで 作ってて450行くらいあります。 各項目には会社名や内容や価格などありますが その中には空白のセルや行もあります。 そこからA列に自分が抽出したい行に印をいれて フィルタをかけたところ、空白があるためか すべてを抽出できません。1行1行抜き出すのもいいのですが 今後、データも増えることを考えると 何かいい方法で抽出したいのですが、 どうしたらいいでしょうか? やはりマクロをつかうのでしょうか? すみませんがよろしくお願いいたします。

    • ベストアンサー
    • Mac
  • エクセルで複数条件のデータ個数を出したい

    仕事で電話アンケートの結果データを集計したいのですが、関数が分かりません。 エクセルのSheet1で下記のようなリストを作成しました。 日付 回答 6/28  A 6/28  B 6/29  A 6/28  A 6/30  A 6/29  C 6/30  D 6/28  C sheet2に下記のような集計をしたいのです。  6/28 6/29 6/30 A B C D 6/28の回答でAのデータはいくつというのは どのような関数を使えばよいのでしょうか? よろしくお願いします。

  • エクセル データ抽出

    よろしくお願いします。 セルA3:E13にこのようなデータが入っています。 G4:H4にデータを入力すると、G8:K12に自動的にデータを抽出したいのですがよい方法はありませんでしょうか。 セルG4:H4のデータを入力しなおすたびに、条件に合うデータをG8:K12に抽出したいです。 実際にはもっと膨大なデータが入り、増え続けます。 エクセルに弱いのでどなたかお力添えください。 よろしくお願いいたします。

  • 2つの条件をデータテーブルに照らし合わせデータを抽出する

    2つの条件をデータテーブルに照らし合わせデータを抽出する 品番  顧客ID  価格 35894  312    A 35894  635    B 35895  215    C 別のシートに下記の価格表があります。 品番   312    215     635 35894  12,000  13,000   14,000 35895  5,000   6,000     7,000 価格欄のA, B, Cに入力すべき数式はどうなるでしょうか。 A=12,000 B=14,000 C=6,000 と表示されるのが求めている結果です。 どなたか教えて下さい。 IFとINDEXとMATCHを使って6つの顧客IDまでなら実現できましたが 顧客数は約50ありますので行き詰まりました。 ソフトウェアはエクセルで、Office 2000 SR-1 Professional版の ものを使用しています。 アドバイスをどうぞ宜しくお願いします。

専門家に質問してみよう