こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

エクセルで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から抽出がしたいです。

よろしくお願いします。

投稿日時 - 2019-05-10 22:07:55

QNo.9615377

すぐに回答ほしいです

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

'こんなカンジでいかがでしょうか

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

投稿日時 - 2019-05-11 07:50:47

お礼

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

投稿日時 - 2019-05-14 16:59:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

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

投稿日時 - 2019-05-11 17:15:48

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-