エクセルマクロで上書きして貼り付けする方法

このQ&Aのポイント
  • エクセルのマクロを使用して、データを上書きして貼り付ける方法について教えてください。
  • 何か入力がある場合でも、上書きして貼り付ける方法を教えてください。
  • 貼り付ける前に選択したセル以降の行をクリアにする方法も教えてください。
回答を見る
  • ベストアンサー

エクセルマクロで上書きして貼り付けの方法は

エクセルのマクロでコピーして貼り付けする場合、貼り付けするセルに何か入力されているとその次の行に飛んで貼り付けしてしまいます。 何か入力されていても上書きで貼り付けする方法を教えてください。次のマクロを参考にお願いします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★名簿").Select Range("B65536").End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub このActiveSheet.Pasteを変えるとできるのかその方法がわかりません。 また,貼り付けする前に選んだセル以降の行をクリアーにしてから、貼り付けすればできますがその範囲の指定の仕方はどうすればいいのでしょうか。マクロの文も教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

まだ開いているのでもう一例載せます。 Dim rngp As Range Dim 開始 Dim 終了 With Workbooks("コピー元ブック.xlsm").Sheets("コピー元シート") 開始 = .Range("r3").value 終了 = .Range("s3").value End With Workbooks("全体名簿.xlsm").Activate Sheets("★名簿").Select Set rngp = Application.InputBox _ ("貼付け先セルを選択!", "貼付け先", Type:=8) Range(rngp, "N" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents With Workbooks("コピー元ブック.xlsm").Sheets("コピー元シート") .Range("B" & 開始 + 1 & ":H" & 終了 + 1).Copy rngp End With

tu73kxmu
質問者

補足

またまたありがとうございます。Set rngp = Application.InputBox _ ("貼付け先セルを選択!", "貼付け先", Type:=8)の文は大変参考になりました。またまた質問ですが次の文では現在正常に動きます。Set rngp = Application.InputBox _ ("貼付け先セルを選択!", "貼付け先", Type:=8)をActiveSheet.Pasteの前に入れるとActiveSheet.Pasteのエラーがでてしまいます。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select Range("B65536").End(xlUp).Offset(1).Select If MsgBox("B列で前のクラスの生徒の次のセルを選択していますか?選択するセルの前が空欄の場合いはそのセルにスペースを入力してください。", vbYesNo) = vbYes Then ActiveSheet.Paste Else: Worksheets("★生徒名簿").Activate End If End Sub 対処方法ありますか。

その他の回答 (4)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.5

≫回答番号:No.4 この回答への補足 >ActiveSheet.Pasteのエラーがでてしまいます。 回答番号:No.3と同じ内容です。 Excelのコピーモードが終了しています。 クリップボードの貼り付けるべきデータが失われるので貼り付けが失敗します。 先にも書きましたが、現状、試されたコードをそのまま提示して頂くと、良いのですが、、、 >対処方法ありますか。 1 CopyメソッドでDestinationを使う事です。 2 Activate とか Select を出来るだけしないことです。 その為にはブック名、シート名を省略せずに明記しなければなりません。 Range("B65536").End(xlUp).Offset(1) 上記のような書き方は、Rangeの上位オブジェクトである、ブック名、シート名が省略されています。 この行を実行時に、アクティブワークブックのアクティブシートという意味になります。 ≪余談≫ .Offset(1)が復活するのですか? .ClearContentsは要らないのですか? 因みに、.ClearContentsしなくても.Pasteは可能だと思います。 同じような内容をたくさん投稿されていますが混乱されていませんか? 他投稿の内容を混ぜ込まないようにしてください。 まずは、本質問の解決を目指し、疑問を解いていってください。 回答番号:No.3で、出来たという報告がありましたがまだ不満足ですか? 回答番号:No.4で、別解を載せましたが、これに対する評価報告はないですか?

tu73kxmu
質問者

補足

お世話になります。いろいろと混乱させてしまいご迷惑をおかけしています。まずは今の状態は次のようになっております。しかし,貼り付けるセルの前に空欄があると一つずれてしまうのが難点です。しかし,NO5でお答えいただいた「Set rngp = Application.InputBox _("貼付け先セルを選択!", "貼付け先", Type:=8)」でメッセージを出して,セルを選択した方が気に入りました。次のマクロに取り入れたかったのですが貼り付けがうまくいかず困っています。作ろうとしているブックは全体の名簿を作成し1組から3組にコピーして分けデータを入力し,また,全体名簿に合体しその後クラス替えを行いまた,新1組から3組に分けデータを入力してもらいます。それを5回繰り返します。そのために,全体名簿のコピーを分けるために1組,2組,3組と名前を変えてもデータを移動して合体できるようにしたいのです。次の文を参考にし「Set rngp = Application.InputBox _("貼付け先セルを選択!", "貼付け先", Type:=8)」が入り,コピー元のフィルの名前を入れずに貼り付ける方法がありましたらお願いいたします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select Range("B65536").End(xlUp).Offset(1).Select If MsgBox("B列で前のクラスの生徒の次のセルを選択していますか?選択するセルの前が空欄の場合いはそのセルにスペースを入力してください。", vbYesNo) = vbYes Then ActiveSheet.Paste Else: Worksheets("★生徒名簿").Activate End If

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

>回答番号:No.2 この回答への補足 多分、コピーモードが終了しています。 クリップボードの貼り付けるべきデータが失われるので貼り付けが失敗します。 現状のコードを提示して頂く良く解るのですがクリアする位置が違っているのでは? Windows("全体名簿.xlsm").Activate Sheets("★名簿").Select Range("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContents Windows("コピー元ブック.xlsm").Activate Sheets("コピー元シート").Select 開始 = Range("r3").value 終了 = Range("s3").value Range("B" & 開始 + 1 & ":H" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★名簿").Select ActiveSheet.Paste >回答番号:No.1 この回答への補足 駄目だしだけでは次に進めません。 期待した結果とどう違うのか説明が必要です。

tu73kxmu
質問者

補足

できました。NO1の回答では補足入力の意味がわからず文章の途中でになってしまいました。懇切丁寧に面倒を見ていただきありがとうございました。今度は合体した名簿を次の年にクラス,名前,その他のデータを1組から3組までに分けるマクロを作成します。また,わからない場合はお世話になります。ありがとうございました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

新規データを追加していくのではないのですか? >貼り付けする前に選んだセル以降の行をクリアーにしてから 多分こういうことだと思います。 Range("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContents >Range("B65536").End(xlUp).Offset(1) 既存のデータの下に新規データを追記する場合に使われる常套手段です。 Range("B65536")の部分は、普通Excelシートの最終行を指定します。 2007以降、行列共にサイズ変更されているので Range("B1048576").End(xlUp).Offset(1) となります。 ただし、2003以前のExcelで実行するとエラーになります。 下記のようにすればどちらにも対応できます。 Range("B" & Rows.Count).End(xlUp).Offset(1) >ActiveSheet.Paste クリップボードの内容をシートに貼り付けるだけの命令文です。

tu73kxmu
質問者

補足

お答えいただきありがとうございますRange("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContentsを入力するとエラーメッセージworksheetクラスのpasteメソッドが失敗しました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Range("B65536").End(xlUp).Offset(1).Select ↑Offset(1) で1行下にオフセットしています。 ↓Offset(1)を外せば希望通りになりませんか? Range("B65536").End(xlUp).Select Offset(行, 列) 列が省略された書き方がされています。 Offset(1, 0) という事です。 あと、下記のようにSelectしなくてもコピーはできます。 ブック指定のところは、WindowsをWorkbooksに変更します。 Range("B" & 開始 + 1 & ":n" & 終了 + 1).Copy _ Workbooks("全体名簿.xlsm").Sheets("★名簿").Range("B65536").End(xlUp) ≪参考1≫ Copyメソッドには、Destinationという便利な引数があります。 セルをコピーする(Copyメソッド) http://www.moug.net/tech/exvba/0050101.htm ≪参考2≫ 1行の記述文が長いと見えにくくなります。 行継続文字「_(アンダーバー)」を使って改行することが出来ます。 コーディングの留意点 ■長いコードは適当なところで改行する http://www.tsware.jp/study/vol16/vbabegin_16.htm

tu73kxmu
質問者

補足

お答えいただきありがとうございましたRange("B65536").End(xlUp).Selectにかえましたがうまくいきませんでしたがいろいろアドバイスありがとうございました。

関連するQ&A

  • エクセルマクロで「今作業をしているファイルを指定す

    る方法について」 上書きのマクロについて質問をしましてxls88さんからお答えいただき無事うまくいきました。そこで次の場合どうすればよういかご教授お願いします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select If MsgBox("B列で前のクラスの生徒の次のセルを選択していますか?", vbYesNo) = vbYes Then Range("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContents Else: Worksheets("★生徒名簿").Activate Windows("2組.xlsm").Activate Sheets("★生徒名簿").Select 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select ActiveSheet.Paste End If End Sub 上記の文で「Windows("2組.xlsm").Activate」でここを今作業しているファイル名を使わずに「2組」と特定しない方法です。なぜかというと全体名簿のフィルをコピーして1組から3組までのクラスに分けるからです。2組と特定してしまうと1,3組は使えなくなってしまうからです。何かいい方法があったらお願いします。

  • Excel 2007 マクロ 表の貼り付け

    Excel 2007 マクロ 表の貼り付け Excel 2007 マクロ 表の貼り付けについて教えてください。 <Sheet1>の表にあるA2からD4を <Sheet2>に値貼り付けをします。 表は画像を添付します。 マクロの記録では下記内容になります。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A2:D4").Select Selection.Copy Sheets("Sheet2").Select Range("A2:D4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub <Sheet1>のA列の行の増減にかかわらず、<Sheet2>に貼り付けることができるように するにはどのようにマクロを修正すればよろしいでしょうか。

  • マクロ 可視セルへコピーする方法

    こんにちは。よろしくお願いします。 A~V列、300~400行程度の表を作っています。 8行目をコピーして空白行へペーストしたいのですがどのようにすれば良いでしょうか。 マクロの記録でつくったものは ActiveSheet.Paste でエラーになります。 またペースト開始行をA17ではなくて可変なものに変えたいです。 よろしくお願いします。 Sub 下までコピー() Range("A8:V8").Select Selection.Copy Selection.AutoFilter Field:=2, Criteria1:="=" Range("A17:V" & Range("B5").End(xlDown).Row).Select Selection.SpecialCells(xlCellTypeVisible).Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFilter Field:=2 End Sub

  • Excel VBA マクロ 画像(図)貼り付け

    Excel2010にて、 VBA マクロ 画像(図)貼り付けを行いたいと思っています。 しかし、マクロを自動登録すると、ActiveSheet.Pictures.Paste.Selectになり、AddPicture ができません。 下記のマクロをAddPictureへ変換したいのですが、そのまま、InsertをAddpictureに変更してもエラーになってしまいます。 いい方法を教えてください(ToT)/~~~。 どうぞよろしくお願いします。 Sub Test() ' ' Test Macro ' Rows("4:4").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Selection.RowHeight = 150# Range("C4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileC.gif"").Select ActiveSheet.Pictures.Paste.Select Range("D4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileD.gif"").Select Selection.Cut Range("D4").Select ActiveSheet.Pictures.Paste.Select Range("E4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileE.gif"").Select Range("E4").Select ActiveSheet.Pictures.Paste.Select Range("F4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileE.gif"").Select ActiveSheet.Pictures.Paste.Select Range("G4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileG.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("H4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileH.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("I3").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileI.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("J4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileJ.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("K3").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileK.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("L3").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileL.gif"").Select ActiveSheet.Pictures.Paste.Select Range("M4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileM.gif"").Select Selection.Cut ActiveSheet.Pictures.Paste.Select Range("N4").Select ActiveSheet.Pictures.Insert( _ "E:\FolderA\fileN.gif").Select Selection.Cut ActiveSheet.Pictures.Paste.Select End Sub

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • エクセルのマクロについて

    エクセルのマクロについて 領域の範囲選択→貼り付けの繰り返し処理をループで考えています。 領域の範囲選択し、貼り付け処理をマクロの自動記録で、出してみました。 Sub Macro1() Range("E6:G12").Select Selection.Copy Range("E17").Select ActiveSheet.Paste Application.CommandBars("Stop Recording").Visible = False End Sub この時に、「Range("E17").Select」の命令は「Cells」関数に置き換えられるのですが、「Range("E6:G12").Select」のように複数のセルの領域選択をする際に、「Cells」関数ではできないのでしょうか。 「Cells」関数を使えば、行列を数値にし、変数を使えば、LoopかFor命令で繰り返し処理ができるのですが、わかる方、解答ください。よろしくお願いします。

  • EXCEL VBA コピー貼り付けについて

    はじめまして。 エクセルのマクロの記録でマクロ作成してますが、希望通りに張り付け出来ずにいます。 (1)張り付けた場所に関数がコピーされない。 (2)最終行にコピーする方法が解らない。 (3)印刷範囲の張り付けできない 皆様お忙しい中恐縮で申し訳ありませんがご教授お願い致します。 Sub コピー() ' Range("A1:AR68").Select Selection.Copy  Range("A69").PasteSpecial xlPasteAll 「最終行へ変更したい」 ActiveSheet.Paste 「関数も含めて貼り付けたい」  ・「印刷範囲をコピーしたい」   End Sub

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • EXCEL 値のみをコピーするマクロ

    お世話になります。 特定のセル(M2)からアクティブセル(クリックで指定したセル)へ「値のみ」をコピーするマクロを考えています。 現在は「そのままコピー」するマクロになっているので、「値のみコピー」へ変更するには どうすればいいでしょうか? Sub 追番貼付け() ' ' Worksheets("データ検索用").Range("M2").Copy Sheets("見積書").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub

  • エクセルのマクロについて

    エクセル97でマクロを組んで下記作業を行いたいと考えていますが(実際にやりたい事から抜粋した内容です)、不具合が起こっています。 ~やりたい事~ コマンドボタンを押すとあるシートのセルをコピーして、違うシートに貼り付ける。 ~不具合内容~ (1)普通にマクロを実行すると問題ないが、(2)コマンドボタンを使用するとエラーが起こる。 エラー内容は、 「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」 と言う内容です。 ~(1)のVB表記~ Sub Macro1() Sheets("sheet1").Select Range("A1").Select Selection.Copy Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~(2)のVB表記~ Private Sub CommandButton1_Click() Sheets("sheet1").Select Range("A1").Select (←ここでエラーが発生します) Selection.Copy  Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~質問事項~ 1)(2)の表記の何が原因でエラーが起こっているのでしょうか? 2)エラーが起きない為にはどのようにしたら良いでしょうか?

専門家に質問してみよう