• ベストアンサー

複数のEXCELファイルより一部の行を自動でマージするマクロ

「(1)複数のEXCELファイル」より、「(2)特定のシート」の中のさらに「(3)特定の行」をコピーし、あるEXCELファイルの1シートに挿入していくマクロ(VBA)か、ソフトが掲載されているサイト、もしくは、やりかたを教えてください。 1.EXCELは、2003 2.「(1)複数のEXCELファイル」は、一つのフォルダにあり、データ形式は一緒。  そのフォルダにはEXCELファイルしか置きません。 3.「(2)特定のシート」について、シート名はどれも一部のみ一致します。  または位置(順番)は一緒です。 4.「(3)特定の行」はどのファイルも作りが一緒です。 VBA初心者ですが、ヒントをいただければ頑張りたいと考えています。

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

ここならフォルダ内のワークブックを順次処理しています。

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_120.html
zushi-shon
質問者

お礼

リンク先をコピペして使用すると、フォルダ内のワークブックを順次処理し印刷する事を確認しました。ありがとうございます。ただ私があまりにも初心者のため、どのようにすればこれを特定の行をマージするマクロにするのかが分かりません。 (8)の以下を何とか差し替える認識で合っていますでしょうか。 --------------------------------------------- ' 全シートを印刷 objWBK.PrintOut ' objWBK.PrintPreview ' ※お試し用(プレビュー) --------------------------------------------- また一例を教えて頂けると、助かります。 条件 1:1ファイルにつき5シートあるEXCELファイルより、3シート目の任意行をコピー 2:上記を集計するファイルに、コピーした行を次々に「コピーしたセルの挿入」を行い結果的に複数のファイルから特定の行を列挙させる。   PS:本件、目的はアンケート結果を項目ごとに抜き出したいためにやっております。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

こんなの初心者のやる課題ではない。 ーー 質問の文章に「特定の」を使いすぎ。模擬実例として、仮の例でもはっきりさせてもらったほうが、読者・回答者は判りやすい。 法律は読みにくいがそんな感じを受ける。 ーー マージするには、2つの!ブックのそれぞれのSheet1とかに限るべきです。そして2つの間にマージがすめば、第3のブックのSheet1とマージを行う。それで質問課題としては、第1段階の場合に限るべきです。 ーー 昔からマージで行われるロジックがあります。それは2つのファイルA,Bをそれぞてキー順にソートし、マージのロジックでAとBのキーを比べて、その、大、小、等しいを 判定し、大小の場合は書き出し、等しい場合は対応フィールドを更新になるのかな(質問には書いてないが)。 これら以外のやり方では、ごたごたしたロジックになるのは必至です。 そのロジックは先人の知恵が詰まっていて、優れたものだからです。 ーー あるいは、A,Bの2つを、A,Bのサインをある列に付加して、単純にAの最終行の下にくっつけるーー>第1課題 キー+(A,Bのサイン)でソートーー>第2課題(<ーマクロの記録からコードが判る 同じキーが続く行区間に着いては、しかるべき処理をする。(BでAの対応列を置き換えて、別シートに書き出すとか、また 同じキーがない行は別シートにそれを書き出し-->第3課題 ーー >データ形式 は別の意味がありそう。 同じ列・項目構成、とかの表現でどうでしょう。具体的に例を書くとか。

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

まず、Dir関数を使用しファイル名を取得します。DO WHILE len(dir()) > 0 でまわします。 Dirは直前にしようしたDir関数とおなじディレクトリの次のファイルを取ってこれるます。 次に、そのブックにシートが存在するかをチェックします。 ADOを使用してチェックすると早いですしEXCELのバージョンによる変更が必要ないのでお勧めです。 チェック方法としては、パターンを使用してチェックするか、instr()関数を使用すればよいと思います。 チェック条件に引っかかればエクセルをオープンし、特定の行をマージすればよいでしょう。 VB6.0のサイトを紹介いたします。 VBAはVB6.0の機能縮小版ですので、VB6.0のコードをほとんど使用することができます。

参考URL:
http://hanatyan.sakura.ne.jp/index.html

関連するQ&A