データ抽出方法・重複データの抽出について

このQ&Aのポイント
  • エクセルで2つのデータから条件に一致したデータを検索・抽出する方法について質問します。
  • データBから商品番号の一致したデータをデータAに追加する方法や、重複データの抽出方法について教えてください。
  • データ抽出には重複データの取り扱いや、入荷日の範囲指定が含まれますので、具体的な手順や関数の利用方法を教えていただきたいです。
回答を見る
  • ベストアンサー

条件に一致したデータの検索・抽出について

エクセルで2つのデータから条件に一致したデータを検索・抽出がしたいのですが、うまく抽出することができないため、質問させていただきます データA |入荷日|商品番号|商品名|数量|金額| |1.1|1111|〇〇〇|10|10| |1.2|2222|◎◎◎|15|15| |1.3|3333|△△△|20|20| |1.4|4444|◆◆◆|10|10| データB |販売日|商品番号|商品名|販売数| |3.1|1111|〇〇〇|   | |3.2|    |AAA|100| |3.3|    |BBB|120| |3.1|2222|◎◎◎|   | |3.3|    |CCC|100| |3.1|3333|△△△|   | |3.1|4444|◆◆◆|   | データBから商品番号の一致したデータの一部を抽出してデータAに追加したいです (一部が難しいようなら1行そのまま抽出でも大丈夫です) 理想は |入荷日|商品番号|商品名|数量|金額|販売数| |1.1|1111|〇〇〇|10|10|   | |   |    |AAA|  |  |100| |   |    |BBB|  |  |120| |1.2|2222|◎◎◎|15|15|   | |   |    |CCC|  |  |100| |1.3|3333|△△△|20|20|   | |1.4|4444|◆◆◆|10|10|   | もしくは、関数を利用して以下の形にできれば、と思います |入荷日|商品番号|商品名|数量|金額|商品名|販売数|商品名|販売数| |1.1|1111|〇〇〇|10|10|AAA|100|BBB|120| |1.2|2222|◎◎◎|15|15|CCC|100|   |   | |1.3|3333|△△△|20|20|   |   |   |   | |1.4|4444|◆◆◆|10|10|   |   |   |   | データAをベースに、データBから重複データのうちすでにデータAにあるものを省き(1件目は重複データなので2件目以降)抽出する 1.データB商品番号重複しています。重複データの1件目はデータAと共通で、2件目以降を抽出したいです 2.データB商品番号の重複はそれぞれ違うため、1件も重複してないものもあれば3件ほど重複しているものもあります 3.データAは入荷日の範囲を指定したデータですが、データBは入荷日項目がないため抽出する必要のない内容・件数のデータもはいっています。その為、データAから抽出するのではなく、データAをベースにデータBから抽出がしたいです。 よろしくお願いします。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.1

'こんなカンジでいかがでしょうか Option Explicit  Dim shDataA As Worksheet  Dim shDataB As Worksheet  Dim shDataC As Worksheet  Dim PutRow As Long '//------------main Sub main()    Dim RowCnt As Long    Set shDataA = ThisWorkbook.Sheets("DataA")  Set shDataB = ThisWorkbook.Sheets("DataB")  Set shDataC = ThisWorkbook.Sheets("DataC")  shDataC.Cells.ClearContents    shDataC.Cells(1, 1).Value = "入荷日"  shDataC.Cells(1, 2).Value = "商品番号"  shDataC.Cells(1, 3).Value = "商品名"  shDataC.Cells(1, 4).Value = "巣量"  shDataC.Cells(1, 5).Value = "金額"  shDataC.Cells(1, 6).Value = "販売数"    RowCnt = 2  PutRow = 1  Do   If shDataA.Cells(RowCnt, 1).Value = "" Then Exit Do   PutRow = PutRow + 1   shDataA.Rows(RowCnt).Copy shDataC.Rows(PutRow)   Tenki shDataA.Cells(RowCnt, 2).Value   RowCnt = RowCnt + 1  Loop End Sub '//------------Sub Sub Tenki(SNum As Long)  Dim RowCnt As Long  Dim HitFlg As Boolean  RowCnt = 2  HitFlg = False    Do   If shDataB.Cells(RowCnt, 1).Value = "" Then Exit Do   If shDataB.Cells(RowCnt, 2).Value = SNum Then    HitFlg = True   ElseIf ((shDataB.Cells(RowCnt, 2).Value <> "") And _    (shDataB.Cells(RowCnt, 2).Value <> SNum)) Then    HitFlg = False   End If       If ((HitFlg = True) And _    (shDataB.Cells(RowCnt, 2).Value = "")) Then    PutRow = PutRow + 1    shDataC.Cells(PutRow, 3).Value = shDataB.Cells(RowCnt, 3).Value    shDataC.Cells(PutRow, 6).Value = shDataB.Cells(RowCnt, 4).Value   End If      RowCnt = RowCnt + 1  Loop End Sub

HumptyDumpty777
質問者

お礼

毎月集計するものなので、VBAで回答いただけてとても助かりました。 こちらに手を加えて使用させていただきます。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルと言えば (1)関数(2)VBA(3)操作(4)特別な操作(例 ピボットテーブル、」統合など) などで解決する方法があるが、(1)の信者や、」、れしかできない質問者が多いようだ。質問者は? ーー 関数では条件を付けて抜き出す、という課題も式が長く、そのアイデアも上級者 でも難しいかな、と思う。 ーー 本件ぐらいになるとVBAでしかできないのでは、と思う。それもADOのSQLなどを使う人もいるかもしれない。  VBAでも難しいと思う。 ーー しかし質問文では、どうしたいというのが、よくわからない。 >条件に一致した>、というのを文章で言ってみてほしい。 ーー 両シートを1つのシートに持ってくると データ種別 入荷日 商品番号 商品名 数量 金額 A 1月1日 1111 〇〇〇 10 10 A 1月2日 2222 ◎◎◎ 15 15 A 1月3日 3333 △△△ 20 20 A 1月4日 4444 ◆◆◆ 10 10 B 3月1日 1111 〇〇〇     B 3月2日      AAA 100 B 3月3日      BBB 120 B 3月1日 2222 ◎◎◎     B 3月3日      CCC 100 B 3月1日 3333 △△△     B 3月1日 4444 ◆◆◆     となる。 (これらはVBAで、やることになろうが、取り合えず手作業で行った) 多分、同一日内やシート全体のスパンで、「重複したものは削除したい」のだろうが、同一日らしい日付例では見つからない。 この質問で、例を挙げているのは、ご丁寧だと思うが、説明文章も添えないと、よくわからない。特に結果データはどうなってほしいのか) よく言う、見れば分かるというのは、疑わしい。 ーーー ○○○とAAAの類はどう違うのか。 商品番号が空白行は、上行と同じということか?セリ結合をしてあるのか。 VBAではセルの結合があると、それをのぞくために、1手間かかる。 何かこれを読んで反応してみて。

関連するQ&A

  • 関数を使ってデータの抽出

    win excel97を使用しています。 sheet1に下記のようなデータが3000件程度あります。   A       B      会社名   取引先会社名 2 aaa    ○○ 3 aaa    ■■ 4 bbb     △△ 5 bbb    ◆◆ 6 bbb     ●● 7 ccc    ×× sheet2のB~のセルに、sheet1の取引先会社名を列方向に 抽出させてたいのですがどうしたらよいでしょうか? マクロやVBAは苦手なので関数で教えていただきたいです。 sheet2   A      B        C       D 会社名 取引先会社名1  取引先会社名2 ・・・ 2 aaa   ○○      ■■      3 bbb   △△      ◆◆     ●●   4 ccc   ××      

  • Excelの関数を使用したデータ抽出

    Excelの関数を使用したデータ抽出 Excelの関数を使用して以下のようなデータ抽出をすることは可能でしょうか? Aに以下の基本データがあります。 --------------- 型番 商品 価格 受注 出荷 仕入 No AAA りんご 100 1/1 1/1 80 001 AAA りんご 120 1/3 1/3 80 002 BBB みかん 200 1/1 1/1 90 003 BBB みかん 210 1/5 1/5 90 004 BBB みかん 220 1/5 1/5 90 005 --------------- Bに型番のみのデータがあります。 --------------- 型番 商品 価格 受注 出荷 仕入 No AAA BBB BBB CCC AAA AAA AAA CCC BBB BBB BBB --------------- Aから抽出したデータをBに反映させたいです。 以下のような形です。 --------------- 型番 商品 価格 受注 出荷 仕入 No AAA りんご 100 1/1 1/1 80 001 BBB みかん 200 1/1 1/1 90 003 BBB みかん 210 1/5 1/5 90 004 CCC ぶどう AAA りんご 120 1/3 1/3 80 002 AAA りんご AAA りんご CCC ぶどう BBB みかん 220 1/5 1/5 90 005 BBB みかん BBB みかん --------------- 宜しくお願い致します。

  • 一覧表よりデータ条件抽出

    教えてください。 下記データ表があります。    A     B      C 1  12/1  AAA  94.1% 2  12/2  BBB  95.6% 3  12/2  BBB  (空白) 4  12/3  CCC  97.3% 5  12/4  DDD  98.4% 6  12/5  EEE  97.3% ・したいこと条件説明 12/2~12/4のデータのみを抽出 %の(空白)セル(行)は抽出しない 日付(A列)は表示しない ・表示結果    A    B 1  BBB  95.6% 2  CCC  97.3% 3  DDD  98.4% としたいのですが・・・ いろいろ試してみましたが、うまくいきません。 よろしく、ご教授のほどお願いします。

  • (EXCEL)重複したデーターの抽出について

    EXCEL2003 シート「sheet1」に下記のようなデーターがあります。 <sheet1>   A   B   C  D 1 りんご 青森 AAA BBB 2 みかん 愛媛 CCC DDD 3 みかん 青森 AAA BBB 4 りんご 青森 AAA BBB 5 みかん 愛媛 CCC DDD A列とB列が同じ値のものをシート「sheet2」に重複しているデーター は1行だけになり、E列にカウントした数が入力されるようにしたいです。 (C列やD列は同じ値でなくてもA列とB列が同じ値の時にカウントして抽出したいです) <sheet2>   A   B   C  D   E  りんご 青森 AAA BBB  2  みかん 愛媛 CCC DDD  2   ご教示のほどお願いします。

  • Excelで同一のデータを抽出して横並びに

    A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  ccc     4 bbb      12  ddd     6 ccc     10  aaa     22 ddd     6   eee     10 eee     5   bbb     7 fff       8 kkk 9 kkk 7 lll 4 上記のようなデータを 以下のように同じ商品コードを横並びに表示させたいのですが どういったcountifとかで試したのですが上手くいかず、どのような関数を使えば可能でしょうか? A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  aaa     22 bbb      12  bbb     7 ccc     10  ccc     4 ddd     6   ddd     6 eee     5   eee     10 fff       8 kkk 7 kkk 9 lll 4 宜しくお願い致します。

  • エクセル、複数行のデータを別シートに集計するには?

    複数行のデータを別シートに、伝票番号別、品名別に反映させるにはどのような関数にすればいいですか? 例えば、 [シート1] 伝票番号   品名   数量 aaa      りんご   50 aaa      バナナ   30 aaa      もも     15 bbb      バナナ   20 bbb      りんご   33 ccc      りんご   10 ccc      バナナ    40 [シート2]    A      B    C    D    1         aaa  bbb  ccc 2 りんご    50   33   10 3 バナナ    30   20   40 4 もも      15 [シート1]の様なデータがあり、それを[シート2]のセルB1に伝票番号を入力したらセルB2、B3...と数量が反映するようにしたいです。 わかりづらくてすいません。 どなたかわかる方がいらしたらお願いします。    

  • 検索SQLについて

    SQL初心者です。 SQL文1つで以下のようなことをしたいんですが いい方法が思いつかなくて大変困ってします。 いい方法がありましたら教えてください。 以下のようなデータがあるとして 電話番号、商品名 、日付 、数量 00000001、商品AAA、2004/10/10、1 00000001、商品AAA、2004/10/10、2 00000001、商品BBB、2004/10/10、1 00000002、商品AAA、2004/10/09、2 00000002、商品AAA、2004/10/10、1 00000003、商品AAA、2004/10/10、1 00000003、商品AAA、2004/10/10、1 電話番号と商品名が同じ場合は (1)日付(降順) (2)数量(昇順) の順に比較して1つだけに絞って取得したい 「取得結果」 電話番号、商品名 、日付 、数量 00000001、商品AAA、2004/10/10、1 00000001、商品BBB、2004/10/10、1 00000002、商品AAA、2004/10/09、2 00000003、商品AAA、2004/10/10、1 よろしくお願いします。

  • エクセルの重複データを抽出し、最新のデータを残した

    エクセルの重複データを抽出し、最新のデータを残したいです。 A列 B列 1 aaa@aaaa.co.jp 2014/1/1 2 bbb@aaaa.co.jp 2013/1/2 3 aaa@aaaa.co.jp 2014/1/10 4 aaa@aaaa.co.jp 2014/10/10 A列にアドレス、B列に日付が入っているデータがあります。 (他にC列などにも顧客情報が入っています。) アドレスの重複データを抽出し、最新の日付の行が残るようにしたいです。 この場合ですと2と4が残るようにしたいです。 膨大なデータの為、困っています。 良い方法をご存知の方、よろしくお願い致します。

  • 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やピボットテーブルを考えましたが、ピンと来ません。 適切なやり方を教えてください。よろしくお願いします。

  • 複数の条件

    名前 G番号 G連番 数量  チーム AAA   1    1    80    1 AAA   2    1    99    1 AAA   3    1    98    1 AAA   3    2    60    1 AAA   4    1    99    1 AAA   4    2    97    1 BBB   1    1    22    2 BBB   2    1    19    2 BBB   2    2    99    2 BBB   3    1    50    2 CCC   1    1    99    1 CCC   2    1    99    1 DDD   1    1    99    1 DDD   2    1    99    1 DDD   1    1    99    2 DDD   2    1    99    2 以上のようなテーブル T_Aがあるとして、以下のような優先順位での抽出条件を考慮した場合のSQL記述方法が分かりません。教えていただけますでしょうか。 名前  "AAA" OR "DDD" ↓ チーム "1" ↓ G番号 "最大"のもの ↓ G連番 "最大"のもの 欲しいレコード 名前 G番号 G連番 数量  チーム AAA   4    2    97    1 DDD   2    1    99    1 以下のようにやってみましたが駄目でした。 SELECT 名前,G番号,G連番,数量,チーム FROM T_A WHERE 名前='AAA' OR 名前='DDD' AND チーム='1' AND (G番号=(SELECT MAX(G番号) FROM T_A)) AND (G連番=(SELECT MAX(G連番) FROM T_A)) 宜しく御願いいたします。

専門家に質問してみよう