ファイルデータを比較し一致したものを並べる方法

このQ&Aのポイント
  • VB初心者の方が二つのファイルデータを比較して一致したものを並べる方法についてアドバイスを求めています。
  • 質問者は、エクセルファイルAとエクセルファイルBのデータを比較し、商店名が一致する行を見つけて別のシートに書き込みたいと考えています。
  • また、情報のマッチング後に欠損しているデータを色付けしたいという要望もあります。
回答を見る
  • ベストアンサー

二つのファイルデータを比較し一致したものを並べる。

こんにちは。VB初心者です。二つ別のファイル(A とB)のデータを比較して、その中で一致したものを並べたいのですが、とっかかりがつかめません。 例えばですが、商店名から下のデータ(一つのエクセルファイルAのシート1)に一致するものを、 EXCEL FILE A Sheet1 担当者  価格    地域  在庫 商品名 商店名 Bさん           埼玉     卵    佐藤屋 Cさん    250円    神奈川 有り 牛乳    高橋屋 もう一つのエクセルのファイル (下のデータ、エクセルファイルBシート1)の中から探して、商店名から比較したデータの結果をもう一つのシートに書き込みたいのですが、どうしたら情報を行ごとにマッチングできるのかわかりません(行ごとに情報が違うので)。。簡単にVLOOKUPでデータを拾うのではなく、マクロで比較したいのですが、よろしくお願いします。 EXCEL FILE B Sheet1 商店名 商品名 価格    地域  担当者 在庫 山田屋 みかん 100円 東京  Aさん 有り 佐藤屋 卵    200円  埼玉  Bさん 有り 高橋屋 牛乳    250円 神奈川 Cさん 有り あと、情報をマッチングの後、情報が抜けているところ(佐藤屋の価格、在庫)を色(赤)に塗ることができますか?こちらのほうもよろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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/17068)
回答No.1

質問の内容(目的)がよく伝わらない。説明がうまくないと思う。 データベースというものの勉強を、してないので要点がはっきり説明できてないと思う。 >VB初心者です エクセルVBAの初心者です、が正しいと思う。VBとなると、今はVB.NET時代で相当VBAと違うから。それが判ってないのが初心者ということかも。 ーー 情報を他ファイルから引いてくるには、キーが必要で、参照される側のデータでは、そのキーが唯一である(ただ一つ(1行)しか現れない)ことが必要。 >例えばですが、商店名から 「例えば」でなく、この質問では1つに限定して、それについて質問すること。あとは質問者が拡大類推できる力がないと。 あれもこれもは、質問コーナーでは適しない ーー FILEAの「在庫商品名」列で「卵」を読んで、FileBの「商品名」列で「卵」の入っている行を調べ(検索して)、FileBでの該当行を引っ張ってくる、ということでよいのか。 FileBでは、「商品名」が「卵」の行は複数出てくる(可能性はある)のか(どうもありそうだな)。そういう点を、はっきり認識し、説明すべきだ。 ーー 質問の意図がよくわからないが、商品「卵」について、近隣地区(関係)の商店での価格を比べて見たいが、その表を作りたい、というような例え話になるのかな。 ーー たとえば FILEAでの商品「卵」をもとに、FILEBの{商品名」列でにフィルタをかけて、結果をSheet3に書き出すというのはどうだろう。エクセルVBAにはFilterメソッドがある。 しかし初心者には結構むつかしいと思う。 ーー 個人的には、今回はFILEBのデータをFILEAのSheet2にコピー貼り付けして、処理を考えてはどうだろう。他ブックデータを扱うのは初心者には、あれもこれもとなって簡単ではなくなるから。

関連するQ&A

  • 同一テーブル内での比較(最新データによる比較)

    大変申し訳ありません。本日も質問させてもらったのですが、一部情報(履歴)が不足していて追加で質問させてください。 以下のようなテーブルがあり、価格が異なるところを差額一覧を出したいと思っております。 (先ほどは2名の方に回答頂き、すみませんベスト10の設定がわからず設定できなくて、すみませんでした。) 【テーブル構成】 商品ID、商店ID、価格(円)、履歴 というテーブルがあり、 商品A、商店1、1000、1 商品A、商店2、1500、1 商品A、商店3、800、1 商品A、商店1、2000、2 商品A、商店2、2500、5 商品A、商店3、1800、3 商品B、商店1、2000、1 商品B、商店2、1700、1 商品B、商店3、2600、1 商品B、商店1、2500、4 商品B、商店2、2000、6 商品B、商店3、2800、7 ・・・(多くの商品データがあります) というデータが格納されております。 商品と商店の区分ごとに履歴の最も大きいものを取り出し (←追加) 商店1を基準に、商品毎に商店2、3の価格差を大きい順にソートして出したいと考えています。 SQL分ではどのように記載すれば良いでしょうか? (実際に比較したデータは以下を抽出し)【履歴の古いのは無視】 商品A、商店1、2000、2 商品A、商店2、2500、5 商品A、商店3、1800、3 商品B、商店1、2500、4 商品B、商店2、2000、6 商品B、商店3、2800、7 ・・・(多くの商品データがあります) (今回の場合の希望出力が以下のような感じです。) 価格差、商品名、商店 (←綱目です。) 800、商品B、商店3 500、商品A、商店2 -200、商品A、商店3 -500、商品B、商店2 ご教授頂けると幸いです。 ちなみに、教えて頂いたSQLをもとに以下のようにやってみましたが、うまくいきませんでした。。。 全くよくわかっていません。少し解説を入れて頂けると幸いです。 ------------------------------------ SELECT a.価格 - b.価格 AS 価格差, a.商品ID AS 商品名, a.商店ID AS 商店 FROM 対象テーブル a INNER JOIN 対象テーブル b ON (a.商品ID = b.商品ID AND b.商店ID = '商店1') WHERE a.商店ID <> '商店1' AND a.履歴 = (SELECT MAX(a.履歴)) AND b.履歴 = (SELECT MAX(b.履歴)) 【←追加】 ORDER BY a.価格 - b.価格 DESC; ---------------------------------------- select t2.価格-t1.価格 as 価格差 ,t1.商品名 ,t1.商店 from テーブル1 as t1 left join ( select 価格,商品 from テーブル1 where 商店=商店1 ) as t2 on t1.商品 = t2.商品 where t1.商店<>商店1 AND a.履歴 = (SELECT MAX(a.履歴)) AND b.履歴 = (SELECT MAX(b.履歴)) 【←追加】 ORDER BY t2.価格 - t1.価格 DESC;

    • ベストアンサー
    • MySQL
  • エクセルのファイル内データ比較

    データがエクセルファイルなのでここで質問いたします. エクセルファイルが300個ぐらいあります. この中で基本になるファイルは50個ぐらいあります. その50個のファイルの1つと残り250個ぐらいのファイル内データを比較できる方法はないでしょうか? 当然一気に比較する方法ではなくてもかまいません. 現在1つ1つ開いて見て比較する途方もない作業で死にそうです. ファイル内データはマクロもなければ計算式すらありません. 数字データがA1~A90,B1~B90まで入っています. データ数は全ファイル共通となっています. どなたか良い知恵を授けてください.お願いします.

  • エクセルでデータの比較をしたいです。お教え頂けないでしょうか

    エクセルでデータの比較をしたいです。お教え頂けないでしょうか エクセルで2つのシートにある同一の商品コードと 在庫数を比較するマクロを作成中です。 シート1のA列にある商品コードとB列にある在庫数を取得し シート2のA列にある商品コードから同じ商品コードを探します。 同一の商品コードがあった場合に在庫数を比較して その数が減少していなければC列に次の処理を加える。  商品コードが合致した後は 処理を抜けて次の商品コードを比較させたいのですが 下行にある商品コードを探し続けてしまいます。(データの総当りとなる) つきましては どの様に記述すれば良いのでしょうか お教え頂けます様 よろしくお願い致します。 *********** Sub check1() Dim kz1 As long 'シート1データ数 Dim kz2 As long 'シート2データ数 Dim st1 As String 'シート名 Dim dt1 As Variant '商品コード Dim dt2 As Variant '在庫数 Sheets("sheet1").Select st1 = ActiveSheet.Name kz1 = Range("a65536").End(xlUp).Row Range("a1").Select ActiveCell.Offset(1, 0).Select For a = 0 To kz1 - 2 Sheets(st1).Select dt1 = ActiveCell.Value '商品コード dt2 = ActiveCell.Offset(0, 1).Value '在庫数 Sheets("sheet2").Select kz2 = Range("a65536").End(xlUp).Row Range("a1").Select ActiveCell.Offset(1, 0).Select For b = 0 To kz2 - 1 '同一商品コードを検索 if activecell.value = dt1 '在庫数を比較 if activecell.value >= dt2 '在庫数が同じ もしくは増加していた場合に処理 '次の処理を追加 endif else ActiveCell.Offset(1, 0).Select endif Next b Sheets(st1).Select Next a end sub

  • Excelで2つの条件が一致したデータの抽出

    Excelで2つの条件が一致したデータの抽出 こんにちわ。 タイトルの通り、Excelで2つの条件が一致したデータの抽出作業を行っています。 Sheet1にデータがあり、以下のような構成なっています。 A列    B列    C列 日付   社員名   売上金 6月1日 鈴木     3万円 6月1日 今井     2万円 6月2日 川口     10万円 6月3日 鈴木     4万円 6月3日 野口     1万円 6月4日 鈴木     3万円 6月7日 佐藤     6万円 6月7日 今井     2万円 6月7日 黒木     7万円 6月9日 野口     3万円 A列の日付は不連続かつ同一日付のものもあります。 Sheet2に以下のフォーマットを作成してあります。 1行目:B1セルから連続する日付(6/1~6/30まで) A列:A2から社員名(社員名は各セルに固定) 6月1日 6月2日 6月3日 6月4日 6月5日 ・・・ 鈴木 佐藤 今井 川口 野口 黒木 Sheet2のセルに、Sheet1の表の日付と社員名が一致した売上金のデータを反映させたいのです。 そこで例えばSheet2のB2セルには以下の関数を入れました。 B2=IF(ISNA(MATCH($A$2:$A$9&$B$1:$N$1,INDEX(Sheet1!$C$2:$C$24&Sheet1!$A$2:$A$24,))),"",INDEX(Sheet1!$D$2:$D$24,MATCH($A$2:$A$9&$B$1:$N$1,INDEX(Sheet1!$C$2:$C$24&Sheet1!$A$2:$A$24,),0))) この関数を入れると、該当するところには売上金のデータが反映されるものの、それ以外のセルには全て#N/Aが表示されてしまいます。 この#N/Aを表示させないようにするには、関数をどのようにすればいいのでしょうか? エクセル初心者なので、分かりやすくご教授願えたら…と思います。 よろしくお願いいたします。 使用OS:XP  使用ソフト:Office2000 Pro.

  • Excel VBAで比較させたい。

    sheet1のA1に山田さん、B1に佐藤さんと打ちます。 で、sheet2のA列に山田さんB列に佐藤さんの情報があります。 それを比較する方法を知りたいんですけど。 ちなみに、sheet1のA1に鈴木さん、B1に山崎さんなど色んなパターンが存在します。 A1に山田さんだったらsheet2のA列、B1に佐藤さんだったらsheet2のB列を見に行って それを比較して、一致しない所だけsheet3に表示させる方法などありますか? 当方まったくの初心者で…(^^;

  • 同一テーブル内での比較(2つの条件での比較)

    大変申し訳ありません。ほかにも似たようなのがあるのですが、応用が利かずわかりませんので、ご教授頂けると幸いです。 以下のようなテーブルがあり、価格が異なるところを差額一覧を出したいと思っております。 【テーブル構成】 商品ID、商店ID、価格(円) というテーブルがあり、 商品A、商店1、1000 商品A、商店2、1500 商品A、商店3、800 商品B、商店1、2000 商品B、商店2、1700 商品B、商店3、2600 ・・・(多くの商品データがあります) というデータが格納されております。 商店1を基準に、商品毎に商店2、3の価格差を大きい順にソートして出したいと考えています。 SQL分ではどのように記載すれば良いでしょうか? (今回の場合の希望出力が以下のような感じです。) 価格差、商品名、商店 (←これは当然、出力されない) 600、商品B、商店3 500、商品A、商店2 -200、商品A、商店3 -300、商品B、商店2 ご教授頂けると幸いです。

    • ベストアンサー
    • MySQL
  • 二つのファイルのある範囲の比較できるソフト

    エクセルでAファイルaシートのある範囲、 Bファイルbシートのある範囲 の比較をして違いを見つけたいのですが、 よいソフト・アドインはないでしょうか? 検索してみたのですが、どうもぴったりくるものがありませんでした ので質問に参りました。

  • 2つのファイルを比較して更新、追加

    顧客管理のデータがAccessに入っています。 それをExcelへエクスポートしてデータを加工しました。 加工したデータをAccessに戻したいのですが、 項目を追加したり削除してしまった為、 Accessの元のデータを再度Excelへエクスポートして 元データ(A)と加工データ(B)とを比較して、追加や更新をしたいです。 ※ちなみにAccessデータに主キーは設定していません。 (A),(B)の項目数や項目名は完全一致はしませんが、 会社名、役職、名前、住所の4項目は一緒です。 Excelでもその共通する項目で2つのシートを比較する事は可能なのでしょうか? 比較対象:会社名と名前が一致するかどうか ・加工データ(B)のみにある場合は、元データ(A)にそのデータを追加 ・(A),(B)両方にある場合は、元データ(A)を加工データ(B)の内容に更新 かなりややこしい質問ですみません。 ご教授いただけると大変助かります。 どうぞよろしくお願いします。

  • エクセルで一致するデータを紐付けしたい。

    エクセル超初心者です。仕事で困っています。是非、ご教授下さい。 エクセルで、sheet1のデータにsheet2のリスト価格データを元に紐付けをしたい。 一致する値は、商品番号です。 sheet1   商品番号  商品名    1      AAA      2      ABA      5      BBC      7      BCE      9      CDE     sheet2 商品番号  価格  1     1000円  2      500円  3      400円  4      200円  5      500円  6      300円  7      200円  8      100円  9      300円 10      500円 11      400円 12      200円 13      100円 結果的に以下の表になればいいのですが…… 宜しくお願いします。 商品番号  商品名      価格  1      AAA        1000円  2      ABA         500円  5      BBC        500円  7      BCE        200円  9      CDE        300円

  • エクセル 在庫表:異なるシートでマッチング

    エクセルの在庫表から、在庫総額を出したいのですが、 在庫数と価格とが別のシートになってしまっています。 マッチングをして、在庫金額を出したいのですが どのような方法があるのでしょうか。 価格 と言うシートのデータが以下の通りだとします。 A1:Tシャツ      B1:1500円 A2:タンクトップ    B2: 1000円 個数と言うシートのデータが以下の通りだとします。 A1:Tシャツ    B1:赤   C1:100個 A2:Tシャツ    B2:青   C2:200個 A3:タンクトップ  B3:白   C3:250個 個数と言うシートのD列に、価格シートの単価を それぞれにマッチングさせて入れたいと思います。 逆に、個数シートA列の情報が同じ商品の個数総計を 価格シートに入れ込む形でも良いのです。 同じ商品でも、カラーごとの在庫管理になっていますが、 最終的に知りたいのは在庫の総額なので、 商品や色ごとの在庫価格は不要です。 総額まで計算できればありがたいですが、とりあえず データがマッチングできさえすれば、表内の総額計算程度ならできます。 よろしくお願いいたします。

専門家に質問してみよう