- 締切済み
【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
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- mt2015
- ベストアンサー率49% (258/524)
失礼。 条件が一致するものが複数ある時、DGETだとエラー扱いになっちゃいますね。 最初からDSUMにしましょう。 =IFERROR(DSUM(SheetB!$A$1:$E$5,D2,A2:C3),"")
- mt2015
- ベストアンサー率49% (258/524)
- tsubu-yuki
- ベストアンサー率46% (179/386)
関数かぁ(笑)。 正直、こういう処理はエクセルを使って考えると のちのち破綻する可能性が高いという事を念頭に。 エクセルはデータベース管理に特化したソフトではないので。 MSOfficeならアクセス辺りを使えるとこの手の処理が簡単なのですが・・ まぁ、環境ですので無理からぬところなのかもしれません。 とりあえず、例示があまりよろしくないようです。 例示を見る限り「項目1」「項目2」「項目3」全てにおいて、 「それぞれ重複が無い」状態ですね。 コレだけ見ると、「項目1」だけでVLOOKUP関数で良いように見えます。 さて、補足いただきたいのですが、 「重複がある場合はどうしようと考えますか?」 まぁ、この辺りがDB管理ソフトとして不足が多いところなのですが、 重複があると仮定すると、VLOOKUP関数では事足りないかもしれません。 「項目1」「項目2」「項目3」全てを合わせても 重複レコードがある、なんて時は難しいですね。 というわけで、例えば重複がある場合のパターンとして ・重複レコードの明細を出力したい ⇒エクセルでやるなら(簡便性・汎用性から)フィルタでしょう。 関数で頑張るのも手段の一ですが、苦労する割に見返りは小さいです。 メンテナンスも面倒ですし。 ・Value()の合計を取りたい ⇒レイアウト次第ではありますが、私なら多分、 ピボットテーブルを作成してソコにフィルタ を選択します。 コレなら、設定次第で明細も取れます。 あるいは、SUMIFS関数で合計してしまうのも手段の一です。 SUMPRODUCT関数でも対応可能です(添付図参照)。 どちらも添付図では2件の合計を返していますが、 該当が1件なら1件分のValueだけを返します。 なお、この関数では明細はとれません。 重複がある場合、と銘打ちましたが、重複が無くても対応できます。 あとはお好みでどうぞ。
- imogasi
- ベストアンサー率27% (4737/17069)
またエクセルの関数患者が質問している。 条件データを決めて抽出するのは、エクセルの「フィルタ機能による抽出」がよいと思う。 https://kokodane.com/2013_waza_053.htm >条件に当てはまるデータを別シートに抽出するには (注)抽出用のシート側からフィルタオプションの設定を実行するということです。 ーー もともとエクセルは目的を満たすための「操作で!行える体系」だと思う。 エクセルは関数だけを使うツールではないと思う。 関数でやると関数式が複雑で長くなって、他人には理解しづらいよ。質問者も、回答をまる写しして、「出来ました、ありがとう」で終わってしまうことになるだろう。自己で式を編み出すなどまず無理だろうから。その際に、中間ワーク列を使うと少しわかりやすい。 一旦条件を満たす行に、条件を満たすサイン+条件を満たすデータ順番を関数で入れておいて、それをもとに別セル範囲に抜き出す方法なら、少し簡単。 関数はAND関数(AND条件だろうから)とIF関数(条件の数だけ)の組み合わせで済むだろう。 その際条件を満たす行の出現はとびとびに、出現することが前提なので、この条件を満たす飛び飛び行を上の行から詰めて表にする関数の作り方がポイントになる。 ーー こういう課題には適した、最低でもアクセスか、またはそのSQLなどがあり、それを使えば誰でも思いつくやり方でできる。関数の「たこつぼ」で苦労しないで、勉強を広げたらどうかな。 ーー 参考 エクセル 抜出 imogasi方式
- bunjii
- ベストアンサー率43% (3589/8249)
>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% (1010/2238)
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 こちらは複数条件に対応した関数ですが、 カウントしかできません。 参考にならなかったらごめんなさい。