エクセルのマクロでコピーして貼り付けする場合、貼り付けするセルに何か入力されているとその次の行に飛んで貼り付けしてしまいます。
何か入力されていても上書きで貼り付けする方法を教えてください。次のマクロを参考にお願いします。
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を変えるとできるのかその方法がわかりません。
また,貼り付けする前に選んだセル以降の行をクリアーにしてから、貼り付けすればできますがその範囲の指定の仕方はどうすればいいのでしょうか。マクロの文も教えていただきたいです。
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
この回答への補足
またまたありがとうございます。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
対処方法ありますか。
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で、別解を載せましたが、これに対する評価報告はないですか?
この回答への補足
お世話になります。いろいろと混乱させてしまいご迷惑をおかけしています。まずは今の状態は次のようになっております。しかし,貼り付けるセルの前に空欄があると一つずれてしまうのが難点です。しかし,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
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 この回答への補足
駄目だしだけでは次に進めません。
期待した結果とどう違うのか説明が必要です。
この回答への補足
できました。NO1の回答では補足入力の意味がわからず文章の途中でになってしまいました。懇切丁寧に面倒を見ていただきありがとうございました。今度は合体した名簿を次の年にクラス,名前,その他のデータを1組から3組までに分けるマクロを作成します。また,わからない場合はお世話になります。ありがとうございました。
補足日時:2010/11/14 17:55No.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
クリップボードの内容をシートに貼り付けるだけの命令文です。
この回答への補足
お答えいただきありがとうございますRange("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContentsを入力するとエラーメッセージworksheetクラスのpasteメソッドが失敗しました。
補足日時:2010/11/14 08:20No.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
この回答への補足
お答えいただきありがとうございましたRange("B65536").End(xlUp).Selectにかえましたがうまくいきませんでしたがいろいろアドバイスありがとうございました。
補足日時:2010/11/14 08:24お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/07/05 09:30
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 4月~3月まで12カ月横に並んだ表へ指定範囲を貼り付けたい。 Sheet2の指定範囲、Range(" 2 2022/11/30 16:37
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
【お題】逆襲の桃太郎
【大喜利】桃太郎が1回鬼退治に失敗したところから始まる新作昔話「リベンジオブ桃太郎」にはこんなシーンがある
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
HPのtextデータをEXCELにコピー...
-
エクセルマクロで上書きして貼...
-
Excel シートのコピーの際、ペ...
-
PDFファイルをコピーしてエクセ...
-
エクセルのユーザーフォームを...
-
Excel シートに別のExcelシート...
-
Excel 数式の保護をしたセルを...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルのワークシートをUSBメ...
-
VBAにて複数フォルダのエクセル...
-
シートのコピーとMsgbox無効化
-
VBA シートをコピー後、ボタン...
-
エクセルでシートを「移動また...
-
WSHで、EXCELにワーク...
-
ページの設定を別シートにコピ...
-
EXCELのVBAでシートコピーをし...
-
エクセル2007 作成した表を丸...
-
エクセルファイルを開く時、常...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
Excelの行をコピーして貼り付け...
-
EXCELで別のブックから式をコピ...
-
Excel シートのコピーの際、ペ...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルVBA 1行飛ばしで転記す...
-
Excel 数式の保護をしたセルを...
-
PDFファイルをコピーしてエクセ...
-
【VBA】コピー&複数個所のペー...
-
エクセルシートを別のエクセル...
-
エクセルの1シートの内容を複...
-
エクセルでシートを「移動また...
-
ページの設定を別シートにコピ...
-
エクセルのワークシートをUSBメ...
-
【エクセル】プルダウン設定の...
-
VBA 先頭文字の0(ゼロ)...
-
シートが保護されていないのに...
-
アクセスの画面をプリントスク...
おすすめ情報