- 締切済み
複数のエクセルファイルを条件付きで一つまとめたい
最初に誤ったカテゴリーに登録してしまったため、再度、同じ内容をこちらに記載させて頂きますことお許し下さい。 いくつかのエクセルファイルがあり、各々のファイルには同様のフォームで Sheet1とSheet2があります。それぞれのファイルのSheet1に入力されているデータを新しい別ファイルのSheet1にまとめたいのです。その際に最初のファイルAの見出しだけを取り込む、各ファイルのSheet1のA列にはNOを付番してありますが、B列以降は空白になっている行もありこの分については行を詰めて取り込みたいのですが、どのようにしたらよいのかわかりません。毎日、更新する必要があるのできればVBAでと思っておりますが、初心者ながらいろいろと調べてみましたが、なかなかうまくいきません。どなたかお教え下さい。 ファイルAのSheet1 A B C D E........ W 1 見出し 2 1 5/12 山田 \1000 ........... ............ 3 2 (空白) 4 3 6/30 鈴木 \2400 ........... ............. 5 4 7/31 田中 \3500 ........... ............. 6 5 (空白) 上記のような感じです。どなたかお助け下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
毎日のお仕事ですよね? 本日のデータが入っているフォルダがあって、そのフォルダの中に集計した新しいファイルを作成する。 明日には、明日のデータを入れるフォルダを作って、集計したファイルを作成する。 毎日、フォルダと日々の集計したファイルが作成されていくということでしょうか? パソコンの活用というか、データの管理とというか、もう少し検討してもらったほうが良いと思います。 例えば、Sheet1はそのまま取り込んで、そのあとは、データのファイルは削除していく。 常に、日々のデータを積み上げたファイルシートだけにしておくなどをお勧めします。
- hige_082
- ベストアンサー率50% (379/747)
詳細が良くわかりません 新しい別ファイルのSheet1にまとめたいとは マクロを実行するたびに新しいファイルを作成すると言うことなの? 最初のファイルAの見出しだけを取り込むとは 最初のファイルと言うことは、いくつかあるファイルの読み込む順番があるの? 見出しだけを取り込むとは、最初のファイルのデータは不要と言うこと? 一応、サンプルとして sheet1のB列が空白でないもののみ、sheet2へコピーするものを提示しておきます 参考にしてみてください Sub test() Dim i As Long With Worksheets("sheet1") For i = 2 To .Range("a65536").End(xlUp).Row If .Cells(i, 2).Value <> "" Then .Rows(i).Copy Worksheets("sheet2").Range("a65536").End(xlUp).Offset(1) End If Next i End With End Sub 比較的簡単なコードで組んでいるので、解説はなし アレンジはご自分で こう言う事がしたいのですが、ここの部分がわからないとした質問の方が 回答が付きやすいようです、参考まで
- KURUMITO
- ベストアンサー率42% (1835/4283)
かなり複雑になりますので、初めはこちらの提案したとおりに試験してみてください。その後に変更をして使用すればよいでしょう。 必要なファイルのシートは一応取り込んでおいてから試験してみてください。 まとめのファイルに入力する操作の前に各ファイルのシート1ではたとえばG2セルに次の式を入力して下方にオートフィルドラッグします。 =IF(OR(A2<>"",B2<>""),MAX(G$1:G1)+1,"") これは空の行を除いた行を上から順に番号を付ける操作です。 式を適当に変えてもよいですね。 次にまとめのファイルのシート1ではE1セルにファイル名をたとえばBook1練習.xlsxのように入力します。また、F1セルには使うシート名としてSheet1のように入力します。G1セルには次の式を入力してそのファイルで指定されたシートでのG列の最高値を表示させます。 =MAX(INDIRECT("["&E1&"]"&F1&"!$G:$G")) 同様にH1セルに別のファイル名を、I1セルにはシート名を、また、J1セルには次の式を入力してG列での最高値を表示させます。 =MAX(INDIRECT("["&H1&"]"&I1&"!$G:$G")) そこでA2セルには次の式を入力し、F2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>$G$1+$J$1,"",IF(ROW(A1)<=$G$1,INDEX(INDIRECT("["&$E$1&"]"&$F$1&"!A:F"),MATCH(ROW(A1),INDIRECT("["&$E$1&"]"&$F$1&"!G:G"),0),COLUMN(A1)),IF(AND(ROW(A1)>$G$1,ROW(A1)<=$G$1+$J$1),INDEX(INDIRECT("["&$H$1&"]"&I$1&"!A:F"),MATCH(ROW(A1)-$G$1,INDIRECT("["&$H$1&"]"&$I$1&"!G:G"),0),COLUMN(A1)),""))) これで二つのファイルで指定されたシートで、データの入力された行が連続して表示されることになります。