よくありますよね。差分というか、デイリー集計したものをマンスリー集計の表にくっつけるような作業です。同じブック(ファイル)ならまだしも、別のブックを立ち上げて張り付けるような作業ですが、歳のせいか、私はもう嫌になってきています。もう、なるべくならキーボードを叩きたくないんですね。マウスを右クリックして、コピーするのも飽きているんですよ。なんか、社会保険庁の組合じゃありませんが、一日のキーボードの文字数を制限してほしい毎日です。

1.同一ファイル(ブック)内の処理

Sheet1から、Sheet2の最終行へタイトル行を除き追加

まず、同一ファイルのシートでから行きます。やりたいのはこんな作業です。単純なことですが、Sheet1にあるレコード4行分をSheet2の最終行直下に追加します。

<Sheet1>

f:id:suguruyoshida38:20161102193635p:plain

<Sheet2>

f:id:suguruyoshida38:20161102193710p:plain

貼り付け対象の行数は可変ですので、最終行を取得するための変数を置きます。また、貼り付け側も最終行は可変ですから、最終行を取得する変数を置き、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:UsersuserDocuments)のシート(シート名: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:UsersuserDocumentsBook2.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