• 締切済み

VBAでコマンドボタン操作で他のシートにコピーする方法を教えてください。

エクセルのVBAでコマンドボタン操作でセルの値を他のシートのセルへコピーしたいのですが、やり方がわかりません。 自分なりに作ってみたのですが何が悪いのか教えてください。 Private Sub CommandButton1_Click() ' Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Private Sub が怪しいのですが対処もわかりません。 ちなみにsheets2のA1には値がはいっています。 よろしくおねがいします。

みんなの回答

  • yukapapa
  • ベストアンサー率60% (60/100)
回答No.1

シートをまたぐ操作で Range を使う場合などは明示的にどのシートの Range か指定しないと思わぬ結果になる事があります。 また、Sheet2のA2以降に記述が無い場合、A1を選んで Ctrl + ↓ は最終行です。 最終行の Offset(1,0)は無いのでこれもエラーに繋がります。 って事で、取り合えず以下の2箇所を直しましたが如何でしょう? Private Sub CommandButton1_Click()  Range("A1").Select  Selection.Copy  Sheets("Sheet2").Select  Sheets("Sheet2").Range("A65536").Select '1)  Selection.End(xlUp).Select        '2)  ActiveCell.Offset(1, 0).Select  ActiveCell.PasteSpecial Paste:=xlPasteValues  Application.CutCopyMode = False End Sub ちなみにもっとシンプルにするなら、Selectを省略する事も可能です。 Private Sub CommandButton1_Click()  Me.Range("A1").Copy  Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues  Application.CutCopyMode = False End Sub 書式もコピーして良いならもっとシンプルになります。 Private Sub CommandButton1_Click()  Me.Range("A1").Copy Destination:= Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) End Sub

watada
質問者

お礼

ご丁寧にありがとうございました。 本当に助かりました。

関連するQ&A

専門家に質問してみよう