みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

はじめまして。
エクセルのマクロの記録でマクロ作成してますが、希望通りに張り付け出来ずにいます。
(1)張り付けた場所に関数がコピーされない。
(2)最終行にコピーする方法が解らない。
(3)印刷範囲の張り付けできない

皆様お忙しい中恐縮で申し訳ありませんがご教授お願い致します。

Sub コピー()
'
Range("A1:AR68").Select
Selection.Copy 
Range("A69").PasteSpecial xlPasteAll 「最終行へ変更したい」
ActiveSheet.Paste 「関数も含めて貼り付けたい」
 ・「印刷範囲をコピーしたい」
 
End Sub

投稿日時 - 2019-05-18 15:45:43

QNo.9617728

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>(1)張り付けた場所に関数がコピーされない。
 これは
  「何も」貼り付けされない
  「値で」貼り付けされる
 のどちらとも読めるのですがどちらでしょうか?
 後者も状況によってはあり得ない話ではないのですが。

>(3)印刷範囲の張り付けできない
一般的な表現としては、印刷範囲は設定するもの(自動的にを含む)で、貼り付けするものではないので、意味を図りかねます。
(それともページ設定ダイアログの印刷範囲欄にセルアドレス文字が貼り付け出来ない(グレーアウトしている)という意味でしょうか?)

それと
>Range("A69").PasteSpecial xlPasteAll
>ActiveSheet.Paste
↑ は同じことをしているように思いますが、何か意味があるのでしょうか?

投稿日時 - 2019-05-19 18:49:16

ANo.2

>(1)張り付けた場所に関数がコピーされない。
Pastespecialは
参考 https://www.moug.net/tech/exvba/0050104.html
「形式を選択して貼り付け」に対応するコードだが、
xlPasteAllを指定するとセルの関数もコピーされるはず。
ーー
ただしセル範囲について、注意しないとおかしなことになる.場合があるかもしれない。絶対番地指定していて、そのまま貼り付けされ、コピー後にコピー元のデータが変わった場合など。
====
>(2)最終行にコピーする方法が解らない。
最終行ーー>「最終行の次」の意味として、
例データ A1:B6として
計数コード
11a
12d
13c
36
13c
Sub test02()
Set cl = Range("A1000").End(xlUp)
Range("A1:B6").Select
Selection.Copy
cl.Offset(1, 0).PasteSpecial xlPasteAll
ActiveSheet.Paste
End Sub
ーー
結果 A7:B12
計数コード
11a
12d
13c
36
13c
>(3)印刷範囲の張り付けできない
これはどういうことを言うのかな?
A1:B6を範囲指定して印刷したとき、終了後、A7:B12を範囲指定して印刷するが、その印刷範囲を次の印刷範囲の印刷で、指定しなくても?A7:B12に設定してくれということか?
初心者にはむつかしい話だと思うの(今までWEBでも見たことない)で、考えないほうがよかろう。
コピー元をSelectした段階で
Sub test03()
MsgBox Selection.Rows.Count
MsgBox Selection.Columns.Count
End Sub
のような、Selection.Rows.Countなどのコードで範囲の行数、列数を採り、貼り付け先(左上隅セル)をもとにして、
コピー先での印刷範囲を計算することはできるが、そんなことをのぞんでいるのかな。
Sub test04()
Range("A1:B6").Select
Selection.Offset(6, 0).Select
End Sub
実のところ、質問の意味が取れてない。

投稿日時 - 2019-05-18 22:01:52

ANo.1

質問の内 (1)は、貴コードを実行して関数をコピーできましたので原因究明できませんでした。
(2)については「Cells(1, 1).End(xlDown).Row」を使えばできます。ただし、途中に空白行があるとその上の行を示すことになります。
(3)については基本的に印刷範囲は1つしか指定できないので、元の範囲をクリアし改めて、新しい範囲を指定することになります。
ExcelのVBAについては、インターネットでたくさんの説明が出ていますので、ご自分で探されると勉強になると思います。
「ExcelVBA 最終行の取得」「ExcelVBA 印刷範囲の指定」など普通の言葉で検索できます。


Sub コピー()
'
'元データの最終行を求める
最終行 = Cells(1, 1).End(xlDown).Row

'元データをコピーし最終行の次の行以下に貼り付ける
Range(Cells(1, 1), Cells(最終行, 44)).Copy
Cells(最終行 + 1, 1).PasteSpecial xlPasteAll

'元データに印刷範囲が設定されている場合はその範囲を確認したうえで新しい印刷範囲を計算し設定する。
If ActiveSheet.PageSetup.PrintArea <> vbNullString Then: '印刷範囲が設定されていれば
範囲 = ActiveSheet.PageSetup.PrintArea: '印刷範囲を取得
新範囲 = "$A$31:$C$60": '新しい印刷範囲を計算する
ActiveSheet.PageSetup.PrintArea = "": '元の印刷範囲をクリアする
ActiveSheet.PageSetup.PrintArea = 新範囲: '新しい印刷範囲を設定する
End If

End Sub

投稿日時 - 2019-05-18 18:15:55

あなたにオススメの質問