- ベストアンサー
エクセルで二つのファイルから同じデータを取りだす方法
- エクセルで作成した二つのDBから、同じ列に同じ情報を持った行を取り出す方法について教えてください。
- 例えば、二つの住所録のようなファイルAとファイルBがあり、郵便番号が154-0001の行を別のファイルCに出力したいです。
- また、出力されたデータがファイルAとファイルBのどちらからのものか判別できるようにしたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
最近、ほぼ同様の質問に3件回答しています。 以下の最初は例を示しただけですが、後の 二つはコードを提示しています。3番目は No4の回答が最終形です。 http://oshiete1.watch.impress.co.jp/qa6401016.html http://oshiete1.watch.impress.co.jp/qa6439871.html http://oshiete1.watch.impress.co.jp/qa6441019.html 縦のものを横に、あるいは横のものを縦に、 あるいは、Keyワードで検索し、データを 加工し、移動、などいろいいろですが、 実際には基本的なことは同じで、いくつか 細かい調整を行なえばデータが取れます。 ただ、細かい調整というのが曲者ですが。 今回の質問は他より少し複雑ですが。一応 動作しています。 方法は他にもあります。データ量が尋常でなければ 他の手段もありますが、ベタな方法ですが、 一応これで確認してみてください。 データの由来を表示したいということで 一番最後の列にそれぞれのデータの由来を 入れます。 一応、検索はA列を対象にします。 Sub test1() Dim wkA As Workbook Dim wkB As Workbook Dim wkC As Workbook Dim LA As Long Dim RA As Long Dim LB As Long Dim RB As Long Dim RC As Long Dim xA As Long Dim yA As Long Dim xB As Long Dim yB As Long '変数の初期化 RC = 0 'Bookの設定 Set wkA = Workbooks.Open(ThisWorkbook.Path & "\ファイルA.xls") Set wkB = Workbooks.Open(ThisWorkbook.Path & "\ファイルB.xls") Set wkC = ThisWorkbook 'ファイルA、Bの最終行、最終列の取得 xA = wkA.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row '最終行 yA = wkA.Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column '最終列 xB = wkB.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row '最終行 yB = wkB.Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column '最終列 'ファイルAのデータを元にファイルBのデータを検索 'ファイルAのA列を検索 For RA = 1 To xA 'ファイルBのA列を検索 For RB = 1 To xB '同じデータが見つかった場合の処理開始 If wkB.Sheets("Sheet1").Cells(RB, "A").Value = wkA.Sheets("Sheet1").Cells(RA, "A") Then RC = RC + 1 For LA = 1 To yA wkC.Sheets("Sheet1").Cells(RC, LA) = wkB.Sheets("Sheet1").Cells(RA, LA).Value Next LA '最後の列にA由来を表示 wkC.Sheets("Sheet1").Cells(RC, LA) = "A" For LB = 1 To yB wkC.Sheets("Sheet1").Cells(RC + 1, LB) = wkB.Sheets("Sheet1").Cells(RB, LB).Value Next LB '最後の列にB由来を表示 wkC.Sheets("Sheet1").Cells(RC + 1, LB) = "B" RC = RC + 1 End If Next RB Next RA End Sub コードの張り間違いはないと思いますが、 一応動作を確認してください。 コードの内容の説明は最初に書いたリンク先の 2、3番目に書いてあります。内容的には 同じなのですが、もしわからないところが あれば補足してください。
その他の回答 (4)
- piroin654
- ベストアンサー率75% (692/917)
肝心なことを書き忘れていました。 コードをファイルCの標準モジュールに 貼り付けて、ファイルCでマクロを 実行してください。 なお、ファイルのパスはファイルCと同じ フォルダにあるという設定にしています。
お礼
追加説明、ありがとうございます。御丁寧にありがとうございました。
- layy
- ベストアンサー率23% (292/1222)
ブック間やシート間において、同じ値の行や列があるかどうか、 大量データを扱う上で、これは頻繁に出くわす処置です。 似たケースで困った質問事例もあります。 以後同じようなことが起きても対処できるようやり方を考え、覚えることです。 郵便番号ではできたが、列の違う電話も同じようにしたいがわからなかった、 これでは質問した意味がない。
- MackyNo1
- ベストアンサー率53% (1521/2850)
>二つのファイルから、同じ列に同じ情報をもった行を取りだす、ということをしたい >例:二つの住所録のようなファイルAとファイルBがあって、郵便番号が154-0001のデータ(行)を、別のファイルCに出力する。 上の説明は、2つの列に共通する種類の違う文字列を抽出したいということで、下の説明は、2つの列のデータから指定したデータ(同じデータが複数ある)を抽出したいということのように見えます。 2つの内容は全く別のことを説明しているように思いますが、このような場合は、元データのセル位置や集計後の結果の表示例など、実際のデータ例をあげて説明されたほうが皆さんから具体的な回答が得られやすいと思います。
お礼
ご助言、ありがとうございます。 今回、皆さんに頂いた回答を踏まえ、まず実践してみたいと思います。 その上で、また躓いてしまった時は、具体的な質問をいたします。 助かります。
- layy
- ベストアンサー率23% (292/1222)
1つの次元に双方あれば比較可能です。 シート1の分にはA シート2の分にはB 合わせると 1540001A 1540001B 1540002A や 1540001A 1540002A や 1540001B 1540002A 1540001が何行あるか どのシート分かで判断できます。 これは手間ではありますが難しくない作業でしょう。 これを自動にもできますがそういうことでしょうか。手間でもやってみてからマクロでいいと思います。 DBというのはアクセスとかか。アクセスあればクエリ操作で可能です。
お礼
回答、ありがとうございました。 参考にマクロのことも調べてみたいと思います。
お礼
ありがとうございます。 私には難易度が高かったのですが、大変勉強になりました。 とても助かりました。