• 締切済み

【Excel】複数条件を指定したデータの取得方法

以下のように情報が入ったExcelシート2つあります。 Sheet:Aの抽出条件を基にSheet:Bを検索に行き、完全一致するレコードが存在した場合はValue値を、不一致の場合はNullを返したいです。 当該処理をExcel関数で実施したいのですが、良い方法は無いでしょうか。 詳しい方、ご教示ください。 ※検索条件はAnd条件になります ■Sheet:A 取得条件を記載したシート。 ●条件1 ・項目1 12345 ・項目2 あああ ・項目3 AAA ●条件2 ・項目1 567 ・項目2 ううううう ・項目3 CCC ●条件3 ・項目1 111 ・項目2 えええ ・項目3 EEO ■Sheet:B マスタ(TBL)情報。 項目1 |項目2 |項目3 |項目4 |Value ―――――――――――――――――――――――――――――――――――― 12345 |あああ |AAA |あいう |100 1234 |ああ |AA |123 |10000 567 |ううううう |CCC |187 |900 789 |えええ |EEO |RYI |5000

みんなの回答

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.6

失礼。 条件が一致するものが複数ある時、DGETだとエラー扱いになっちゃいますね。 最初からDSUMにしましょう。 =IFERROR(DSUM(SheetB!$A$1:$E$5,D2,A2:C3),"")

全文を見る
すると、全ての回答が全文表示されます。
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.5

こういう事でいいのかな? 添付の図ではSheetAのD3セルに↓の式が入っています。 =IFERROR(DGET(SheetB!$A$1:$E$5,D2,A2:C3),"") 条件を満たすデータが複数あるときは最初に見つかった値を返します。 もし、複数ある時に合計を出したいならDGETの代わりにDSUMを使います。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

関数かぁ(笑)。 正直、こういう処理はエクセルを使って考えると のちのち破綻する可能性が高いという事を念頭に。 エクセルはデータベース管理に特化したソフトではないので。 MSOfficeならアクセス辺りを使えるとこの手の処理が簡単なのですが・・ まぁ、環境ですので無理からぬところなのかもしれません。 とりあえず、例示があまりよろしくないようです。 例示を見る限り「項目1」「項目2」「項目3」全てにおいて、 「それぞれ重複が無い」状態ですね。 コレだけ見ると、「項目1」だけでVLOOKUP関数で良いように見えます。 さて、補足いただきたいのですが、 「重複がある場合はどうしようと考えますか?」 まぁ、この辺りがDB管理ソフトとして不足が多いところなのですが、 重複があると仮定すると、VLOOKUP関数では事足りないかもしれません。 「項目1」「項目2」「項目3」全てを合わせても 重複レコードがある、なんて時は難しいですね。 というわけで、例えば重複がある場合のパターンとして ・重複レコードの明細を出力したい  ⇒エクセルでやるなら(簡便性・汎用性から)フィルタでしょう。   関数で頑張るのも手段の一ですが、苦労する割に見返りは小さいです。   メンテナンスも面倒ですし。 ・Value()の合計を取りたい  ⇒レイアウト次第ではありますが、私なら多分、   ピボットテーブルを作成してソコにフィルタ   を選択します。   コレなら、設定次第で明細も取れます。   あるいは、SUMIFS関数で合計してしまうのも手段の一です。   SUMPRODUCT関数でも対応可能です(添付図参照)。   どちらも添付図では2件の合計を返していますが、   該当が1件なら1件分のValueだけを返します。   なお、この関数では明細はとれません。 重複がある場合、と銘打ちましたが、重複が無くても対応できます。 あとはお好みでどうぞ。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

またエクセルの関数患者が質問している。 条件データを決めて抽出するのは、エクセルの「フィルタ機能による抽出」がよいと思う。 https://kokodane.com/2013_waza_053.htm >条件に当てはまるデータを別シートに抽出するには (注)抽出用のシート側からフィルタオプションの設定を実行するということです。 ーー もともとエクセルは目的を満たすための「操作で!行える体系」だと思う。 エクセルは関数だけを使うツールではないと思う。 関数でやると関数式が複雑で長くなって、他人には理解しづらいよ。質問者も、回答をまる写しして、「出来ました、ありがとう」で終わってしまうことになるだろう。自己で式を編み出すなどまず無理だろうから。その際に、中間ワーク列を使うと少しわかりやすい。 一旦条件を満たす行に、条件を満たすサイン+条件を満たすデータ順番を関数で入れておいて、それをもとに別セル範囲に抜き出す方法なら、少し簡単。 関数はAND関数(AND条件だろうから)とIF関数(条件の数だけ)の組み合わせで済むだろう。 その際条件を満たす行の出現はとびとびに、出現することが前提なので、この条件を満たす飛び飛び行を上の行から詰めて表にする関数の作り方がポイントになる。 ーー こういう課題には適した、最低でもアクセスか、またはそのSQLなどがあり、それを使えば誰でも思いつくやり方でできる。関数の「たこつぼ」で苦労しないで、勉強を広げたらどうかな。 ーー 参考 エクセル 抜出 imogasi方式

全文を見る
すると、全ての回答が全文表示されます。
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

>Sheet:Aの抽出条件を基にSheet:Bを検索に行き、完全一致するレコードが存在した場合はValue値を、不一致の場合はNullを返したいです。 Excelの組み込み関数ではNull(未入力セルの値=Blank)を返すものはありませんので、一般的には文字列長が0の「""」を代入します。 幾つかの組み込み関数を組み合わせて目的に合う値を抽出する数式を設定できます。 貼付画像のD2セルへ次の数式を入力して下へ必要数コピーすれば目的に合うと思います。 =IF(AND(A2<>"",COUNTIFS(B!$A:$A,A2,B!$B:$B,B2,B!$C:$C,C2)),INDEX(B!$E:$E,MAX(INDEX((B!$A$2:$C$10=A2:C2)*ROW(B!$A$2:$A$10),0))),"")

全文を見る
すると、全ての回答が全文表示されます。
  • skp026
  • ベストアンサー率45% (1011/2238)
回答No.1

VLOOKUP関数と、少しの工夫をすることで、 実現は可能です。 以下はVLOOKUP関数についての情報です。 https://www.hello-pc.net/howto-excel/vlookup/ 今回の場合の工夫は、項目の1~3を連結させた新たな列を作り、 VLOOKUP関数で検索する対象をその例にすることです。 たとえば項目4とvalueの間に、work1という列を追加します。 式は、=A1&B1&C1 というイメージになります。 見た目は良くないので、この列は非表示にすると良いと思います。 ※ Valueを要求せずカウントのみならCOUNTIFS関数 という方法もあります。 https://www.becoolusers.com/excel/countifs.html こちらは複数条件に対応した関数ですが、 カウントしかできません。 参考にならなかったらごめんなさい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel2002:複数条件のデータの個数の集計

    苦手な集計について質問させてください。 [A] [B] [1] AAA aaa [2] BBB bbb [3] AAA aaa [4] AAA bbb [5] BBB ccc 上記のようなデータで[A]と[B]のAND条件でみたときの個数を集計したいと思います。 例えば上記であれば、 [A]AAAかつ[B]aaa・・・2個 [A]BBBかつ[B]bbb・・・1個 [A]AAAかつ[B]bbb・・・1個 [A]BBBかつ[B]ccc・・・1個 になります。[B]のデータは[A]のデータに依存せず、[A]の各値にまたがっています。([B]bbbは[A]AAAと[A]BBBの場合があります) 実際のシートでは、全パターンを網羅したリストがA列とB列、集計対象がD列とE列にあります。 上記の例でいえば、以下のようになっています。 [A] [B] [C] [D] [E] [1] AAA aaa AAA aaa [2] AAA bbb BBB bbb [3] BBB bbb AAA aaa [4] BBB ccc AAA bbb [5] BBB ccc つまり[A]列と[B]列が組み合わせパターン、[D]列と[E]列が集計元データです。 ちなみにパターン数が414個、集計元データは29000個程度です。 そして最終的な各パターンの個数を[C]列に表示させたいと思います。 VLOOKUPやピボットテーブルを考えましたが、ピンと来ません。 適切なやり方を教えてください。よろしくお願いします。

  • 【Excel】複数条件でのカウント

    お世話になります。  列 A    B 行  項目X    項目Y 1 あ     aaa 2 あ     bbb 3 い     aaa 4 い     bbb 項目X = "あ" & 項目Y = "aaa" のカウントをしたいのですがどのような関数になりますか? それぞれ単独の場合は、 (1)countif(A1:A4,"あ") → 2 (2)countif(B1:B4,"aaa") → 2 になるのはわかるのですが、ひとつのセルにこの二つの条件をand条件でカウントするやり方がわかりません。 よろしくお願いします。

  • 【Excel】日付を条件のひとつに指定してデータ集計

    Excel2003を使用しています。 Sheet1   A    B         C 1 4/1  (株)Excel    \100 2 4/1  ACCESS    \300 3 4/1  Excel(株)    \200 4 4/2  Word       \150 5 4/2  Excel       \100 6 4/3  ACCESS(有)  \200 7 4/3  Excel       \100 7 4/3  (有)ACCESS  \100 が入力されている表があります。 Sheet2に   A    B    C 1 4/2  合計値 個数 2 4/3  合計値 個数 Sheet2のA1セルに日付(仮に4/2とします)を入力したら、Sheet1にある条件に一致する日付を検索し、尚且つ、部分一致する文字列(仮にExcelとします)を検索し、両条件に一致したC列の合計を Sheet2のB1セルに表示させる様にしたいのですが、どのようにすればいいでしょうか? 又、上記同様で Sheet2のA1セルに日付(仮に4/3とします)を入力したら、Sheet1にある条件に一致する日付を検索し、尚且つ、部分一致する文字列(仮にACCESSとします)を検索し、両条件に一致した個数を Sheet2のC2セルに表示させる様にしたいのですが、どのようにすればいいでしょうか? 関数で試してみたのですが、うまくいかなかったので、質問させていただきました。 よろしくお願いします。

  • 2つの条件に完全合致するデータ件数の出し方 (Excel)

    下記【↓データ元】ようにカンマ区切りされているデータがあり、任意の2つの条件に合致するデータ数をマトリクス表形式で埋め込みたいと考えています。 完全一致するデータのみカウント対象とするので(ex.CCC(株)等、条件文字に追加文字があるようなものは除く)、splitで配列に入れてfindで一つ一つ検索していくしかないでしょうか? (データ数が多いと、処理時間がとてもかかるので・・・。) 私が行いたいと思っていた解決策に直結するような下記サイトがあったのですが、これだと条件文字が含んでいればカウント対象(ex.CCC(株)等、条件文字に追加文字があるものも対象)となってしまうので、ご助言いただきたく書き込みしました。 何かアドバイスがありましたら、宜しくお願いいたします。 【↓参考になりそうだと思われたサイト】 http://ohpa.net/modules/xlnote/content0166.html 【↓データ元】 AAA BBB,CCC DDD CCC,AAA AAA,CCC BBB 【↓出力イメージ】    AAA BBB CCC DDD AAA 1 0 2 0 BBB 0 1 1 0   CCC 2 1 0 0 DDD 1 0 0 0

  • FindFirst複数条件

    access 超初心者です。 フォームに2つのコンボボックス(COM_A,COM_B)があり そのコンボボックスで条件を2つ設定し、テーブル(TBL)から 条件の一致したレコードを検索したいのですが、うまくいきません。 TBLのフィールド AAA ---> COM_Aで指定 BBB ---> COM_Bで指定 Dim db As DAO.Database Dim TBL As DAO.Recordset Set db = CurrentDb Set TBLrs = db.OpenRecordset("TBL", dbOpenDynaset) TBLrs.FindFirst"AAA='"&Me.COM_A&"'"And"BBB='"& Me.COM_B & "'" If TBLrs.NoMatch Then 処理 Else 処理 End If というコードなのですが、実行すると『型が一致しません』となってしまいます。 TBLrs.FindFirst"AAA='"&Me.COM_A&"'" If TBLrs.NoMatch Then ~ とか TBLrs.FindFirst"BBB='"&Me.COM_B&"'" If TBLrs.NoMatch Then  ~ のように条件を1つにすると各々問題なく動作します。 単純にAndでひっつけるだけではダメなのでしょうか? いろいろ調べましたが、完全に行き詰ってしまいました。 ヒントでもいただければありがたいです。 よろしくお願いします。

  • SQL、2つのテーブルで条件一致したものだけdeleteする方法は?

    オラクルSQLで質問です やりたいことは、 テーブルAから以下の条件に該当するデータを削除する。 基本的にはテーブルBの内容と比較して、一致したもの。 条件(全ての条件を満たすこと)  テーブルA.AAA = テーブルB.AAA  テーブルA.BBB = テーブルB.BBB  テーブルB.CCC > 0 調べたところ、SQLサーバでは以下のように from を2つ書いて実現できるようです。 が、今回はオラクルなので文法エラーになります。 delete FROM テーブルA FROM テーブルB where テーブルA.AAA = テーブルB.AAA AND テーブルA.BBB = テーブルB.BBB AND テーブルA.CCC > 0 ; commit; よろしくお願いします

  • ExcelVBA 一致する名前に対してデータを設定する方法について

    初めまして。tommy57111と申します。 ExcelVBAでプログラムの実現方法をご教授願いたいと思い投稿させて頂きました。 2つの表があり、<Sheet1>の一致する"名前"に対して、 <表1>の"年齢"欄に<Sheet2>の"年齢"を取得して、設定を行いたいです。 "名前"と"年齢"を一つのデータとして、<Sheet2>から取得し、 <Sheet1>で一致する名前を検索して、値を設定すれば良いことまではわかるのですが、実現方法がわかりません。 どなたかご教授をよろしくお願い致します。 <Sheet1> A B C -------------------------- 1 |名前 | 年齢 | 住所 | 2 |A | | AAA | 3 |B | | BBB | 4 |C | | CCC | <Sheet2> A B ------------------- 1 |名前 | 年齢 | 2 |B | 23 | 3 |A | 30 | 4 |C | 18 | ↓結果 A B C -------------------------- 1 |名前 | 年齢 | 住所 | 2 |A | 30 | AAA | 3 |B | 23 | BBB | 4 |C | 18 | CCC |

  • SQL 複数条件を設定

    使用言語はjavaで処理しており、 SQL Server2005にて下記のようなテーブル(T_Kekka)があります。    ID   a-1   a-2   b-1   b-2   c-1   c-2     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd    ccc   eee   fff       2   ggg   bbb   ccc     hhh   iii    jjj       3   bbb   mmm   ddd   ccc   fff    eee       4   bbb   aaa   ccc    ddd   qqq   rrr       5   zzz   sss   ttt     ccc   vvv   xxx       6   zzz   aaa   ttt     ccc   vvv   fff       7   zzz   zzz   zzz     zzz   zzz    zzz       8   qqq   rrr   ccc     ddd   fff    eee    検索する値は下記の通りです。 検索値 |a-1|a-2|b-1|b-2|c-1|c-2|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |aaa|bbb|ccc|ddd|eee|fff| 期待値としては、aはaのグループで検索、bはbのグループで検索、cはcのグループで検索をし、 一致個数の多い順に出力したいと考えております。(理想は下記のような感じです。) また、グループ内であれば逆転していてもOKです。 (例えばID:1のaグループのような感じです。) *1 一致数が同じ場合はcグループの数が多いデータが最優先となり、その他はID順になります。 期待値    ID   a-1   a-2   b-1   b-2   c-1   c-2   一致数  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    1   bbb   aaa   ddd   ccc   eee   fff     6    3   bbb   mmm   ddd   ccc   fff    eee    5    8   qqq   rrr    ccc   ddd   fff    eee    4・・・*1    4   bbb   aaa   ccc   ddd   qqq   rrr     4    6   zzz   aaa   ttt    ccc   vvv    fff     3    2   ggg   bbb   ccc   hhh   iii     jjj      2    5   zzz   sss   ttt    ccc   vvv    xxx     1    7   zzz   zzz   zzz    zzz   zzz    zzz     0 知識不足のため私には複雑すぎて悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。 また、まだテスト段階なので現状のようなテーブル構造にしてしまいましたが、 他のテーブル構造の方がデータが抽出しやすかったり、レスポンスがいい場合がありましたら、 ご教授いただけると助かります。 説明が分かりづらく表が見づらくて申し訳ございませんが、 宜しくお願い致します。

  • Excel2003の条件付き書式について

    お世話になります。 条件付書式で下記のようなことが可能か、可能であれば設定方法をご教授お願いします。 【シート1】(単価リスト)※単価の昇順で並べ替えています。    A     B     C       D    E 1 レベル  単価  カテゴリー  商品名  在庫 2   1     5      AAA     りんご   ● 3   2     7      BBB     みかん 4   3     8     CCC     いちご 5   2     8     DDD     か き   【シート2】(各商品に必要な材料表)※材料名の昇順で並べ替えされています。     A       B     C 1 カテゴリー  商品名   材料 2  BBB     みかん  オレンジ 3  DDD     か き   オレンジ 4  CCC     いちご   赤 3  AAA     りんご    赤  4  BBB     みかん   黄 5  AAA     りんご    黒 6  AAA     りんご    白  上記のような同じBOOK内の2枚のシートで商品名をキーとして 【シート1】のE列「在庫」に「●」が入っている商品の場合 【シート2】の商品名セルが塗りつぶされるようにしたいのです。 【シート2】には、1つの商品に対して必要な材料すべてが行を変えて記入されているため、同じ商品名が複数あります。 たとえばりんごの場合 【シート1】のE列「在庫」に「●」が入っているので【シート2】の商品名「りんご」 のセル(B3、B5、B6)はすべて塗りつぶされる。 (他の商品は「在庫」に「●」が入っていないので【シート2】の商品名セルは塗りつぶしなしのまま) 条件付き書式の「数式で」で検索する関数と「●」が入っている場合は FLASEとなるようIF関数の組み合わせを条件1と条件2に指定して試してみたのですが 上手くいきませんでした。 説明が足りなかったり、分かりにくければ補足させていただきますので宜しくお願いします。

  • 【少し急いでます】エクセルについて教えてください!

    Excel2000を使っています。 A列に重複するデータがあり、B列に別データがあります(20000行強) 例)     A  B 1  001 aaa 2   001 bbb 3   001 ccc 4   002 aa 5  002 bb 6  003 aaa 7  003 bbb 8  004 ddd 9   004 eee 10  005 aa 11  006 bbb A列で重複する001は3行あり、重複しているデータは1行にまとめてB列のaaa、bbb、cccをつなげたいです。(わかりづらくてすみません) 例)     A      B 1  001  aaa・bbb・ccc 2  002   aa・bb 3  003  aaa・bbb というようにまとめたいです。 どのような方法がありますでしょうか? よろしくお願い致します。

専門家に質問してみよう