- ベストアンサー
エクセルについての質問です。
質問させていただきます。 すでに作成してあるファイルに他のファイルのデータを下の行に継ぎ足したいのですが可能でしょうか。 例: ファイルA A B C 1品名 合計 日付 ←タイトル 2鉛筆 7 1002 3定規 1 1002 4メモ帳 5 1002 ファイルB A B C 1品名 合計 日付 ←タイトル 2筆箱 7 1002 3インク 1 1002 4雑誌 5 1002 ↓↓↓これがこうなります。 A B C 1品名 合計 日付 ←タイトル 2鉛筆 7 1002 3定規 1 1002 4メモ帳 5 1002 5筆箱 7 1002 6インク 1 1002 7雑誌 5 1002 通常は1ファイルに1ファイル分を足すだけです。 ただまとめて足したい時もあるので複数ファイルを一気に継ぎ足す方法、もしくはマクロなどもご存知でしたらご教授下さい。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
出来るかって質問なら答えは「出来る」です。 ちょっとまる投げの雰囲気ですが、、、 下記は同時に開いているマクロを仕込んだブック以外の全ブックに対して、一番左のシートA1以下にあるデータを、マクロを仕込んだブックの一番左のシートに追加コピーします。 参考に。 Sub Test() Dim wb As Workbook For Each wb In Workbooks If Not wb Is ThisWorkbook And Windows(wb.Name).Visible Then With wb.Worksheets(1).Range("A1").CurrentRegion .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Copy _ ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Offset(1, 0) End With End If Next wb End Sub
その他の回答 (2)
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 > 下に数回同じものが繰り返されてコピーしてしまう 複数回実行している以外に考えられません。 開いている全てのブックに対して動作しますので、仮にAブックとBブックを同時に開き、Aブックをアクティブにして実行、Bブックをアクティブにして実行、のようにすればA・Bとも2回コピーされる事になります。 > F列以降空きセルがあるので空きセルまでの設定となっているのかもしれません。 > 一番最後の入力のあるセルの列までにしたいのですが可能でしょうか CurrentRegion は空白行と空白列で囲まれたセル範囲を返すのでそうなります。 1行目のタイトル行が切れている場合はダメです。 1行目にタイトルだけでも設定すれば修正の必要は無いはずです。 また、最終行がある列がどの列かはっきりしていれば下記のように直す事でも可能です。 (A列を最終行判定にした場合) With wb.Worksheets(1) .Range("A2:M" & .Range("A65536").End(xlUp).Row).Copy _ ThisWorkbook.Worksheets(1).Range("A65536").End(xlUp).Offset(1, 0) End With > それともう1つ何故かこのマクロを設定後、エクセルのファイルを開けると・・・ これはマクロを含むブックにデータを転記するサンプルです。 個人用マクロブックにコピーしたのであれば、個人用マクロブックのSheet1に転記されているのかも知れません。 ウィンドウ-再表示で Personal.xls を開いて、データを消してから非表示に戻しましょう。 --- ご自分の環境に合わせて多少なりとも書き換えられないと、運用していく時に困りますよ。
- imogasi
- ベストアンサー率27% (4737/17069)
関数では非常に難しい。 毎回どこの行へShet1のデータが来るか、それまでのデータ数によって左右されて決められないから。 ーー VBAでやることを考えると、この質問は丸投げの課題になる。 VBAの経験が余りないときは、マクロの記録をまず頼りにしましょう。 Sheet1にデータだあり、Sheet2に順次、最下行の下に継ぎ足していくとします。 マクロの記録モードにします(ツールーマクロー新しいマクロの記録) 手動で、Sheet1のデータを範囲指定して、コピーし、Sheet2に貼り付けます。 私の模擬例では Sub Macro1() Range("A1:B5").Select Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste Sheets("Sheet1").Select End Sub と出ました。 ーー このままではだめなのはどこか。 ここで、場合場合で変わるのはB5です。 データ数で最下行が変わるからです。 (1)その場合場合の最下行を捉えるのはどういうようになるか。 常套句みたいなものがあり、 d = Range("A65536").End(xlUp).Row MsgBox d です。 (2)それをRange("A1:B5").Select にどう反映させるか Range("A1:B" & d).Select です (3)Sheet2の最下行の1行下に貼り付けたいが Sheet2の最下行を捉えるのはどうするか (1)と同じです。 (4)ただしSheet2のアクチブセルを変なところへ置いておくと そこを基点にして張り付く。これでは困る。最終行のA列の1行下を指しておきたい。それで d = Worksheets("Sheet2").Range("A65536").End(xlUp).Row MsgBox d Worksheets("Sheet2").Range("A" & d + 1).Select (5)あとの問題は、もしSheet1以外をアクチブにして実行すると変なことになる。 それで最初に Worksheets("Sheet1").Select を入れておく。 上記で拙くてもうまく動くと思うが。 あとMsgBox行はコメント化します。 ーー 全体は Sub Macro1() Worksheets("Sheet1").Select d = Range("A65536").End(xlUp).Row 'MsgBox d Range("A1:B" & d).Select Selection.Copy d = Worksheets("Sheet2").Range("A65536").End(xlUp).Row 'MsgBox d Sheets("Sheet2").Select Worksheets("Sheet2").Range("A" & d + 1).Select ActiveSheet.Paste Sheets("Sheet1").Select End Sub
お礼
こんばんは。ありがとうございました。ただ非常に不思議なのですが、下に数回同じものが繰り返されてコピーしてしまうのと、コピーされるのは何故かF列までになっています。もしかするとF列以降空きセルがあるので空きセルまでの設定となっているのかもしれません。できれば一番最後の入力のあるセルの列までにしたいのですが可能でしょうか(ちなみに自分の場合はM列が最後に記入されている列になります)。 ご面倒をお掛けしますが何卒宜しくお願い致します。
補足
度々すみません、それともう1つ何故かこのマクロを設定後、エクセルのファイルを開けると(どれでも)一瞬パッとたくさんのデータが出てすぐ消えて通常の開けたファイル内容に戻ります。マクロを削除しても同じ状態になってしまい、もしご存知のことが分かりましたらご教授下さい。宜しくお願い致します。