- ベストアンサー
ファイルデータを比較し一致したものを並べる方法
- VB初心者の方が二つのファイルデータを比較して一致したものを並べる方法についてアドバイスを求めています。
- 質問者は、エクセルファイルAとエクセルファイルBのデータを比較し、商店名が一致する行を見つけて別のシートに書き込みたいと考えています。
- また、情報のマッチング後に欠損しているデータを色付けしたいという要望もあります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 小生の誤解で質問内容を変えて解釈しているかもしれないが、1つの参考に。 例え、別の質問であったとしても、今後別の場面で 参考になると思う。 ーー 例データ Sheet1 調べたい商品の一覧データ。下記では卵とみかん。 担当者 価格 地域 在庫商品名商店名 Bさん 埼玉 卵 佐藤屋 Cさん 250円 神奈川 みかん 高橋屋 ーー 例データ(filebからコピーをお勧め) 少し勉強が進んだら、FILEBを直接対象にしたVBAが組めるだろう。 調べるべき資料データ。 Sheet2 商店名 商品名 価格 地域 担当者 在庫 山田屋 みかん 100 東京 Aさん 有り 佐藤屋 卵 200 埼玉 Bさん 有り 高橋屋 牛乳 250 神奈川 Cさん 有り 井上商店 卵 188 埼玉 Bさん 有り 東京商店 みかん 98 埼玉 Aさん 有り 木村 卵 195 埼玉 Bさん 有り 今村 みかん 92 静岡 Aさん 有り ーー コード 標準モジュールに Sub test01() l1 = Worksheets("Sheet1").Range("A65536").End(xlUp).Row MsgBox l1 For i = 2 To l1 c = Worksheets("Sheet1").Cells(i, "D") MsgBox c 'selection.AutoFilter Worksheets("Sheet2").Range("A1:F65536").AutoFilter Field:=2, Criteria1:=c Worksheets("Sheet2").Range("A1").CurrentRegion.Copy Sheets("Sheet3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) Next i End Sub ーー 実行結果 Sheet3 商店名 商品名 価格 地域 担当者 在庫 佐藤屋 卵 200 埼玉 Bさん 有り 井上商店 卵 188 埼玉 Bさん 有り 木村 卵 195 埼玉 Bさん 有り 商店名 商品名 価格 地域 担当者 在庫 山田屋 みかん 100 東京 Aさん 有り 東京商店 みかん 98 埼玉 Aさん 有り 今村 みかん 92 静岡 Aさん 有り ーー 私は商品の区切りとして、あるのも良いと思ったが、 見出し「商店名 商品名 価格 地域 担当者 在庫」が重ねて中間に入っているが、省く方法は http://officetanaka.net/excel/vba/tips/tips155c.htm に解説がある。 全般にフィルタのVBAについてこのWEBサイトは参考になる。また田中亨さんの、WEBのVBAの記事は、常々良さを感じています。 ーー 急いでコードを書いて、テストやチェックが不十分かもしれませんが、よろしく。 参考 上記の例データをシートに再現するには、操作の、データー区切り位置以下で処理すると、セルごとにうまく配置されます。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
質問の内容(目的)がよく伝わらない。説明がうまくないと思う。 データベースというものの勉強を、してないので要点がはっきり説明できてないと思う。 >VB初心者です エクセルVBAの初心者です、が正しいと思う。VBとなると、今はVB.NET時代で相当VBAと違うから。それが判ってないのが初心者ということかも。 ーー 情報を他ファイルから引いてくるには、キーが必要で、参照される側のデータでは、そのキーが唯一である(ただ一つ(1行)しか現れない)ことが必要。 >例えばですが、商店名から 「例えば」でなく、この質問では1つに限定して、それについて質問すること。あとは質問者が拡大類推できる力がないと。 あれもこれもは、質問コーナーでは適しない ーー FILEAの「在庫商品名」列で「卵」を読んで、FileBの「商品名」列で「卵」の入っている行を調べ(検索して)、FileBでの該当行を引っ張ってくる、ということでよいのか。 FileBでは、「商品名」が「卵」の行は複数出てくる(可能性はある)のか(どうもありそうだな)。そういう点を、はっきり認識し、説明すべきだ。 ーー 質問の意図がよくわからないが、商品「卵」について、近隣地区(関係)の商店での価格を比べて見たいが、その表を作りたい、というような例え話になるのかな。 ーー たとえば FILEAでの商品「卵」をもとに、FILEBの{商品名」列でにフィルタをかけて、結果をSheet3に書き出すというのはどうだろう。エクセルVBAにはFilterメソッドがある。 しかし初心者には結構むつかしいと思う。 ーー 個人的には、今回はFILEBのデータをFILEAのSheet2にコピー貼り付けして、処理を考えてはどうだろう。他ブックデータを扱うのは初心者には、あれもこれもとなって簡単ではなくなるから。