エクセルのマクロでコピーして貼り付けする場合、貼り付けするセルに何か入力されているとその次の行に飛んで貼り付けしてしまいます。
何か入力されていても上書きで貼り付けする方法を教えてください。次のマクロを参考にお願いします。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
CDの保有枚数を教えてください
ひとむかし前はCDを買ったり借りたりが主流でしたが、サブスクで簡単に音楽が聴ける今、CDを手に取ることも減ってきたかと思います。皆さんは2024年現在、何枚くらいCDをお持ちですか?
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
-
4
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
5
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
-
6
エクセルVBA 作業後に選択範囲を解除する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 関数を使ってデータと一...
-
エクセルの選択範囲以外を削除...
-
エクセルのワークシートをUSBメ...
-
Excel 複数 シートコピー 同...
-
Excel シートのコピーの際、ペ...
-
EXCELのVBAでシートコピーをし...
-
エクセルでシートを「移動また...
-
【VBA】コピー&複数個所のペー...
-
ExcelVBAで、ユーザーフォーム...
-
EXCELで別のブックから式をコピ...
-
エクセルでシート1に会員名簿を...
-
エクセルVBA 1行飛ばしで転記す...
-
複数のシートを別ブックにコピ...
-
PDFファイルをコピーしてエクセ...
-
シートをたくさんコピーするに...
-
エクセルシートを別のエクセル...
-
エクセルマクロで上書きして貼...
-
アクセスの画面をプリントスク...
-
【エクセル】プルダウン設定の...
-
Excelの警告について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの選択範囲以外を削除...
-
Excel 関数を使ってデータと一...
-
EXCELのVBAでシートコピーをし...
-
Excelの行をコピーして貼り付け...
-
EXCELで別のブックから式をコピ...
-
エクセルでシートを「移動また...
-
Excel 数式の保護をしたセルを...
-
エクセルのワークシートをUSBメ...
-
Excel シートのコピーの際、ペ...
-
エクセルシートを別のエクセル...
-
エクセルの1シートの内容を複...
-
【VBA】コピー&複数個所のペー...
-
【Excel VBA】シートコピー時、...
-
ページの設定を別シートにコピ...
-
VBA シートをコピー後、ボタン...
-
【エクセル】プルダウン設定の...
-
PDFファイルをコピーしてエクセ...
-
ExcelVBAで、ユーザーフォーム...
-
エクセルのページをシートごと...
-
シートが保護されていないのに...
おすすめ情報