よくありますよね。差分というか、デイリー集計したものをマンスリー集計の表にくっつけるような作業です。同じブック(ファイル)ならまだしも、別のブックを立ち上げて張り付けるような作業ですが、歳のせいか、私はもう嫌になってきています。もう、なるべくならキーボードを叩きたくないんですね。マウスを右クリックして、コピーするのも飽きているんですよ。なんか、社会保険庁の組合じゃありませんが、一日のキーボードの文字数を制限してほしい毎日です。
1.同一ファイル(ブック)内の処理
Sheet1から、Sheet2の最終行へタイトル行を除き追加
まず、同一ファイルのシートでから行きます。やりたいのはこんな作業です。単純なことですが、Sheet1にあるレコード4行分をSheet2の最終行直下に追加します。
<Sheet1>
<Sheet2>
貼り付け対象の行数は可変ですので、最終行を取得するための変数を置きます。また、貼り付け側も最終行は可変ですから、最終行を取得する変数を置き、RnageオブジェクトのOffsetプロパティを使うのがいいのではないでしょうか。レコードセットを使うような上級レベルのやり方もありますが、ちょっとしたものならこれで十分です。
Sub タイトル行を除き別シートに追加() '変数の宣言 Dim LstRow1 As Long Dim LstRow2 As Long '最終行の取得 LstRow1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row LstRow2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row 'タイトル行を除き、Sheet2へコピー、貼り付け Worksheets("Sheet1").Range("A2:C" & LstRow1).Copy Worksheets("Sheet2").Range("A" & LstRow2).Offset(1, 0).PasteSpecial xlPasteAll End Sub
2.別のファイル(ブック)を開いて、貼り付け、保存
Sheet1から、別ファイル(ブック名:Book2 パス:C:\Users\user\Documents)のシート(シート名:Sheet1)にタイトル行を除いて、最終行の下に貼り付けます。
Sub タイトル行を除き別ファイルのシートに追加() '変数の宣言 Dim LstRow1 As Long Dim LstRow2 As Long '最終行の取得(コピー側) LstRow1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 'タイトル行を除き、コピー Worksheets("Sheet1").Range("A2:C" & LstRow1).Copy 'Book2ファイルを開く Workbooks.Open "C:\Users\user\Documents\Book2.xlsx" 'Book2のSheet1の最終行の取得(貼り付け側) LstRow2 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最終行下に貼り付け Worksheets("Sheet1").Range("A" & LstRow2).Offset(1, 0).PasteSpecial xlPasteAll 'Book2ファイルの保存(貼り付け側) ActiveWorkbook.Save End Sub