• 締切済み

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

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

みんなの回答

回答No.3

>(1)張り付けた場所に関数がコピーされない。  これは   「何も」貼り付けされない   「値で」貼り付けされる  のどちらとも読めるのですがどちらでしょうか?  後者も状況によってはあり得ない話ではないのですが。 >(3)印刷範囲の張り付けできない 一般的な表現としては、印刷範囲は設定するもの(自動的にを含む)で、貼り付けするものではないので、意味を図りかねます。 (それともページ設定ダイアログの印刷範囲欄にセルアドレス文字が貼り付け出来ない(グレーアウトしている)という意味でしょうか?) それと >Range("A69").PasteSpecial xlPasteAll >ActiveSheet.Paste ↑ は同じことをしているように思いますが、何か意味があるのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>(1)張り付けた場所に関数がコピーされない。 Pastespecialは 参考 https://www.moug.net/tech/exvba/0050104.html 「形式を選択して貼り付け」に対応するコードだが、 xlPasteAllを指定するとセルの関数もコピーされるはず。 ーー ただしセル範囲について、注意しないとおかしなことになる.場合があるかもしれない。絶対番地指定していて、そのまま貼り付けされ、コピー後にコピー元のデータが変わった場合など。 ==== >(2)最終行にコピーする方法が解らない。 最終行ーー>「最終行の次」の意味として、 例データ A1:B6として 計数 コード 11 a 12 d 13 c 36 13 c 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 計数 コード 11 a 12 d 13 c 36 13 c >(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 実のところ、質問の意味が取れてない。

回答No.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

関連するQ&A

専門家に質問してみよう