こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

「(1)複数のEXCELファイル」より、「(2)特定のシート」の中のさらに「(3)特定の行」をコピーし、あるEXCELファイルの1シートに挿入していくマクロ(VBA)か、ソフトが掲載されているサイト、もしくは、やりかたを教えてください。


1.EXCELは、2003
2.「(1)複数のEXCELファイル」は、一つのフォルダにあり、データ形式は一緒。
 そのフォルダにはEXCELファイルしか置きません。
3.「(2)特定のシート」について、シート名はどれも一部のみ一致します。
 または位置(順番)は一緒です。
4.「(3)特定の行」はどのファイルも作りが一緒です。


VBA初心者ですが、ヒントをいただければ頑張りたいと考えています。

投稿日時 - 2008-12-10 23:33:05

QNo.4545871

すぐに回答ほしいです

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

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

参考URL:http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_120.html

投稿日時 - 2008-12-11 11:58:47

お礼

リンク先をコピペして使用すると、フォルダ内のワークブックを順次処理し印刷する事を確認しました。ありがとうございます。ただ私があまりにも初心者のため、どのようにすればこれを特定の行をマージするマクロにするのかが分かりません。

(8)の以下を何とか差し替える認識で合っていますでしょうか。
---------------------------------------------
' 全シートを印刷
objWBK.PrintOut
' objWBK.PrintPreview ' ※お試し用(プレビュー)
---------------------------------------------

また一例を教えて頂けると、助かります。

条件
1:1ファイルにつき5シートあるEXCELファイルより、3シート目の任意行をコピー
2:上記を集計するファイルに、コピーした行を次々に「コピーしたセルの挿入」を行い結果的に複数のファイルから特定の行を列挙させる。
 

PS:本件、目的はアンケート結果を項目ごとに抜き出したいためにやっております。

投稿日時 - 2008-12-11 21:27:19

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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課題
ーー
>データ形式
は別の意味がありそう。
同じ列・項目構成、とかの表現でどうでしょう。具体的に例を書くとか。

投稿日時 - 2008-12-11 21:37:33

ANo.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

投稿日時 - 2008-12-11 09:01:41

あなたにオススメの質問