エクセルで二つのファイルから同じデータを取りだす方法

このQ&Aのポイント
  • エクセルで作成した二つのDBから、同じ列に同じ情報を持った行を取り出す方法について教えてください。
  • 例えば、二つの住所録のようなファイルAとファイルBがあり、郵便番号が154-0001の行を別のファイルCに出力したいです。
  • また、出力されたデータがファイルAとファイルBのどちらからのものか判別できるようにしたいです。
回答を見る
  • ベストアンサー

2つのエクセルから同じデータを持つ行を出力する方法

エクセルで作成した二つのDBがあります。それぞれ、列・行の数は異なるのですが、同じ名称の列(例えば郵便番号)を持っています。 この二つのファイルから、同じ列に同じ情報をもった行を取りだす、ということをしたいのですが、関数やマクロでの実現できる方法がございましたら、教えて頂けないでしょうか。 例:二つの住所録のようなファイルAとファイルBがあって、郵便番号が154-0001のデータ(行)を、別のファイルCに出力する。(また、ファイルC上では、各データがファイルAとファイルBのどちらから出力されたものかも、判別が付くように出力したい) 分かりにくいケースで大変恐縮ですが、ご存じの方がおりましたら、どうぞよろしくお願いいたします。 ※エクセル2003を使用しています。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

最近、ほぼ同様の質問に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番目に書いてあります。内容的には 同じなのですが、もしわからないところが あれば補足してください。

tsubame_fun
質問者

お礼

ありがとうございます。 私には難易度が高かったのですが、大変勉強になりました。 とても助かりました。

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

肝心なことを書き忘れていました。 コードをファイルCの標準モジュールに 貼り付けて、ファイルCでマクロを 実行してください。 なお、ファイルのパスはファイルCと同じ フォルダにあるという設定にしています。

tsubame_fun
質問者

お礼

追加説明、ありがとうございます。御丁寧にありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

ブック間やシート間において、同じ値の行や列があるかどうか、 大量データを扱う上で、これは頻繁に出くわす処置です。 似たケースで困った質問事例もあります。 以後同じようなことが起きても対処できるようやり方を考え、覚えることです。 郵便番号ではできたが、列の違う電話も同じようにしたいがわからなかった、 これでは質問した意味がない。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

>二つのファイルから、同じ列に同じ情報をもった行を取りだす、ということをしたい >例:二つの住所録のようなファイルAとファイルBがあって、郵便番号が154-0001のデータ(行)を、別のファイルCに出力する。 上の説明は、2つの列に共通する種類の違う文字列を抽出したいということで、下の説明は、2つの列のデータから指定したデータ(同じデータが複数ある)を抽出したいということのように見えます。 2つの内容は全く別のことを説明しているように思いますが、このような場合は、元データのセル位置や集計後の結果の表示例など、実際のデータ例をあげて説明されたほうが皆さんから具体的な回答が得られやすいと思います。

tsubame_fun
質問者

お礼

ご助言、ありがとうございます。 今回、皆さんに頂いた回答を踏まえ、まず実践してみたいと思います。 その上で、また躓いてしまった時は、具体的な質問をいたします。 助かります。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

1つの次元に双方あれば比較可能です。 シート1の分にはA シート2の分にはB 合わせると 1540001A 1540001B 1540002A や 1540001A 1540002A や 1540001B 1540002A 1540001が何行あるか どのシート分かで判断できます。 これは手間ではありますが難しくない作業でしょう。 これを自動にもできますがそういうことでしょうか。手間でもやってみてからマクロでいいと思います。 DBというのはアクセスとかか。アクセスあればクエリ操作で可能です。

tsubame_fun
質問者

お礼

回答、ありがとうございました。 参考にマクロのことも調べてみたいと思います。

関連するQ&A

  • エクセルのデータを1行ずつ別々にしたい。

    次のような1列のデータを2列に変更したいのです。 エクセルの初心者なものでいろいろ工夫してみましたがうまくいきません。良い方法を教えてください。データは1000行くらいあります。 元のデータ 1 あ 2 a 3 い 4 b 5 う 6 c ほしいデータ 1 あ    a 2 い    b 3 う    c 4 え    d 5 お    e 6 か     f どうぞ、よろしくお願いします。

  • エクセルの住所録データから郵便番号を引き出す方法はありますか?

    エクセルの住所録データから郵便番号を引き出す方法はありますか? A列に氏名B列に住所C列に電話番号が入力されています。 できればB列に郵便番号を一括変換で入力をしたいのですが・・・ エクセルで不可能であればフリーソフトでそのようなものがあればありがたいのですが・・・ よろしくお願いします。

  • Excel 二つの表を用いたデータ整理

    かなり困っています。 (1)二つのエクセル表が存在 (2)ファイル1には↓のようにデータが並んでいます    A列  B列  C列  D列    生徒A 生徒B 生徒C 生徒D 行1 国語27 国語34 国語54 算数34 行2 数学36 家庭25 算数23 理科23 行3 理科55 理科44 理科21 英語44 行4 社会87 社会33 社会32 行5 英語54  (3)ファイル2は以下のようになっています    A列  B列  C列  D列  E列        国語  算数  理科  社会 行1 生徒A 27   36   55   87 行2 生徒B  (4)要するに、ファイル1のデータから必要な数値を抽出して ファイル2のデータに移し変えたいのですが、ファイルAの中の名称とデータ数が異なる場合があることもあり、整理はコピペしかないのかと半ばあきらめています。 とはいえデータの数は4000…正直なきたいです…何かいい方法はありませんか?

  • エクセル VBA データ並び替えと行削除

    エクセル2003にて VBA初心者です。 以下のようなデータがあります。  列A    列B     列C  識別   部品番号  ユニット         A10000   *100         A10001   *101         A10002   *102  *     A10002   *103         A10003   *104  *     A10003   *105  *     A10003   *106  ・        ・      ・  ・        ・      ・  ・        ・      ・ 列Bには部品番号が、列Cにはユニット名が記入されています。 同じ部品番号でもユニットが異なる場合には、列Aに*が記入されています。 このようなデータが20,000行ほどあります。 上記のようなデータを以下のように並べ替えたいと考えております。  列A    列B      列C     列D     列E  識別   部品番号   ユニット   ユニット  ユニット        A10000    *100        A10001    *101        A10002    *102     *103        A10003    *104     *105     *106 VBAを利用すればできるんだろうなーと思っていますが、 見当もつきません。 どうぞよろしくお願いいたします。

  • Excelで、同一データ行を知るには

    Excel2000で、 A列からD列までまったく同じデータの場合、色をつけてくれる方法を教えてください。 例えば、 A20=A100 かつ B20=B100 かつ C20=C100 かつ D20=D100 の場合、同じデータとして、20行目と100行目に色をつけるようにしたいです。 次善の策として、 A列からD列だけでなく、E列以降もすべてまったく同じデータの場合でもいいです。 なお、ソートしたり、行の順番を変えるのはナシにしてください。 また、A列からD列のデータをくっつけるのも、できれば避けたいです。(それぞれの列を比較して異なる場合でも、くっつけたら同じになる場合もありうるので。)

  • Excel データの抽出について教えて下さい。

    初めて質問させて頂きます。 Excelでデータの抽出と言ったらいいでしょうか・・・ 「一定の条件に当てはまった場合に、別のセルに数字を入力する」 というような処理をしたいのですが、データ量が多くて、 どのようにやったら効率がいいのか、頭を悩ませています。 例えば・・・       A列  B列 1行目  111   A 2行目  112   B 3行目  115   C 4行目  115   C 5行目  118   D といったようなデータが1500件ほどあります。 このデータを使って、A列の中で番号が2つ(又は3つ等)あるものに、      A列   B列  C列 1行目  111   A 2行目  112   B 3行目  115   C    1 4行目  115   C    1 5行目  118   D といった感じで決まった数字を表示する方法がないでしょうか? こんな説明でご理解頂けるかどうか、心配なんですが・・・。 いい方法をご存知の方がいらっしゃいましたら、力を貸して下さい。

  • EXCELでのデータ整理

    縦に長いデータ列があり、その先頭の行には文字が入ってます。 その後に数値が縦にズラッと並んでいます。 この縦に並んだデータ列を一括で規格化したいと思ってます。 (できれば列の最後に、最大値を残したいです。) あまりプログラムとかわからないので、よろしくお願いします。 こんな感じになればいいなぁ~と思ってます。 ↓ A B C(←EXCELの列番号) _______ a b c 4 1 5 4 4 0 2 2 4 0 1 2  ↓変換後 A  B  C(←EXCELの列番号) _______ 1.0 0.25 1.0 1.0 1.00 0.0 0.5 0.50 0.8 0.0 0.25 0.4 4   4  5 (←それぞれの列の最大値) 私もVisual Basicを使って頑張ってみたいと思ってます。 Visual Basicはやったことがないので、、、helpを見ればできるのでしょうか?。。。

  • エクセル 複数行にまたがっているデーターを一つの行にまとめたい

          A列  B列   C列 1行目  佐藤 北海道 りんご 2行目  佐藤 北海道 ばなな   3行目 伊藤  東京  いちご 4行目  伊藤  東京  ばなな  上記のようなデーターがあります。これを2行目と4行目を削除し下記のようにしたいのですが       A列  B列      C列 1行目  佐藤 北海道  りんごばなな 2行目  伊藤  東京   いちごばなな A列とB列のデーターが同じでC列のデータが異なる場合、上記のように一行にまとめたいのです。関数やVBAで上記の処理を出来る方法がありますでしょうか。 

  • EXCELの入力を簡単にする方法を教えて下さい。

    初心者なので言葉足らずになってしまうかもしれませんが教えて下さい。 EXCELのA列には番号(英数字)、B列には名称が入ったデータがあります。 別のEXCELファイルを立ち上げ、セルA1に上記A列の番号(英数字)を手入力した場合、セルB1に上記B列の名称が自動的に表示して欲しいのですが、何か良い方法はありますでしょうか?

  • エクセル 重複行の編集 色をつける

    お世話になります。 エクセル2000にて以下のような表を作りました。    A |B |C 1 名称|1/11|123 2 ああ|1/11|456 ←行全体に色を付けたい 3 ああ|1/12|789 4 いい|1/11|999 ←行全体に色を付けたい 5 いい|1/11|888 ※行はA・B列をキーに、昇順(順序良く)並んでいます。 表の中に重複行(A・B列をキーとして)が存在していて、その一つ目の行に、色を付けたいのですが、 どうすれば実現できるでしょうか? 例でいうと、2・4行目に色を付けたいのですが、術が思いつきません。 どうぞご教授下さいm(__)m

専門家に質問してみよう