帳票の一番最後の空白セルに値を貼り付けるには?

Question 55.1 Previous Next
指定したセルをコピーして、指定したBOOKの中のシートの帳票の一番最後の空白セルに、値を貼り付けするというマクロを作りたいのですが、うまくいきません。
ちなみに下記は、わたしが作って失敗したマクロです。お手数ですがご指導のほどお願い致します。
Sub Macro1()
10  Sheets("データベース").Select
12      Range("I33:T33").Select
14      Selection.Copy
20  Windows("JESSver4.00TEST.XLS").Activate
30  Workbooks.Open Filename:="D:\住器業務\JESS発注帳票.XLS"
32      Worksheets("帳票").Select
34      Range("A3").Select
40  Windows("JESS発注帳票.XLS").Activate
42      Range("A3").Activate
44      Selection.End(xlDown).Select
46      Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
          SkipBlanks:=False, Transpose:=False
50      ActiveWorkbook.Save
52      Windows("JESS発注帳票.XLS").Close
60  Windows("JESSver4.00TEST.XLS").Activate
62      Sheets("出力画面").Select
64      Range("C6").Select
End Sub
Answer   Copyright (C) 2002.9.12 永井善王
ご提示されたマクロに行番号を入れておきましたので、それを使って解説します。
やりたいことに直接関係するコードは、下記のとおりでしょうか。
10~14行目… 「データベース」シートの I33:T33セルをコピーして、
30~32行目… 「JESS発注帳票.XLS」を開いて、「帳票」シートの A3セルを選択し、
40~46行目… 「JESS発注帳票.XLS」をアクティブにして、一番最後の空白セルを選択して、値を貼り付け、
50~52行目… そのブックを保存して、閉じる。
よって、関係なさそうなコードは、20、60~64行目のようです。

このマクロのポイントは、「一番最後の空白セルに」という点です。それ以外は、ごく単純なコピー貼り付けのマクロですから、あまり難しく考えずに自動記録したマクロを部分修正する方法が良いでしょう。
自動記録して、行番号を付けて整理したのが次のマクロです。 school
Sub Macro1()
10  Sheets("データベース").Select
12      Range("I33:T33").Select
14      Selection.Copy
30  ChDir "D:\住器業務"
31  Workbooks.Open Filename:="D:\住器業務\JESS発注帳票.xls"
32      Sheets("帳票").Select
44      Range("A4").Select
46      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
47      Application.CutCopyMode = False
50      ActiveWorkbook.Save
52      ActiveWorkbook.Close
End Sub
30行目に新しいコードが入りましたが、これから開こうとするブックが、それまでに開いているブックと同じフォルダーにある場合には不要です。元の30行目が31行目に変わっています。47行目に不要なコードがありますが、目障りならば削除して構いませんし、そのままでも害はありません。

44行目は仮に作ってありますから修正しなければなりません。あなたのマクロでは Endプロパティの引数を xlDownに指定して終端セルを取得していますが、この方法はデータが入っていない状態で使用すると不具合が出る場合があります。
それを避けるため、下記のように引数を xlUPに変更してシートの最下端から取得する方法をお勧めします。
44      貼付行 = Range("A65536").End(xlUp).Row + 1
45      Range(Cells(貼付行, 1), Cells(貼付行, 1)).Select
修正後の 44行目では、終端セルの次のセルを変数「貼付行」に代入しています(そのままですと空白セルになりませんから)。そして、その変数を使って A列のセルを選択しているのが 45行目です。
【参考ページ】  
範囲を検出して選択(上端、下端、左端、右端、他)

 

Excel VBA Macro