ワークシートの印刷設定をコピーする方法について

このQ&Aのポイント
  • ワークシートの印刷設定をコピーするためのマクロを作成しています。
  • 現在のコードでは、印刷設定が正しく移植されていないため、エラーが発生しています。
  • より簡単な方法があるかどうか、アドバイスをいただければ幸いです。
回答を見る
  • ベストアンサー

ワークシートの印刷設定をコピーする。

ワークシートの印刷設定をコピーする。 雛形シートのコピーを新しいシートにペーストするマクロを組んでいます。 雛形シートで  Cells.Copy 新しいシートで  Selection.Paste これで一応、コピー&ペーストできますが、印刷設定がまるで移植されていないので、  dim PS as PageSetUp として、雛形シートで  Set PS=ActiveSheet.PageSetUp 新しいシートで  Set ActiveSheet.PageSetUp=PS としたのですが、  実行時エラー '438':  オブジェクトは、このプロパティまたはメソッドをサポートしていません。 となりました。  Set ActiveSheet.PageSetup=PS というコードをどう改めたら良いのか分かりません。 あるいはもっと簡単な方法があったらご教授ください。

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

  • ベストアンサー
  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.3

「雛形シートの××をコピーする」という考え方は、やめましょう。 「雛形シートのコピーに××をコピーする」が正しいです。 これで、考え直してみてください。

makoji
質問者

お礼

お世話になります。 最初に私が作ったコードと、前回の回答を参考に改良したコードで、ベンチマークを計ってみました。100枚のシートをコピーするものです。最初のコードでは、雛形シートの印刷設定を8項目コピーしています。 結果は、  最初のコード  60秒  改良したコード 22秒 でした。 どうもありがとうございました。

makoji
質問者

補足

早速のお返事をありがとうございます。 >「雛形シートのコピーに××をコピーする」が正しいです。 既存シートで残したいのはシート名だけですので、  SheetName=(既存シート).Name とでもして、次に既存シートの前か後ろに雛形ファイルをコピー。 その後、既存シートを削除して、雛形ファイルからコピーした新規シートの名前にSheetNameを代入するということでしょうか。こちらの方が、私のやり方よりもコードが簡単で良いですね。 でもシートなんて大きなオブジェクトを新規挿入したり削除したりというのは結構重たくなりそうです。まあ、数枚のシートでそれをやったからといって、プログラムが全然重たくなるということでもないですが。 もっと良い方法があるのではないだろうかという私の疑問にお気を悪くされたら申し訳ないのですが、当初私が書いたコードがあまりにも冗長だったもので、雛形シートの使いまわしなんて良くある作業だから絶対に簡便な記述方法が他にあるはずだという思いつきから、今回質問させていただきました。 だからどうしてももっと良い方法があるのではないだろうかという観念に囚われてしまうのです。申し訳ありません。

その他の回答 (2)

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

ファイルーページ設定にあたるものは、シートごとに設定項目を決めて保存できる、シートオブジェクトに対するメソッド・プロパティであるようだ。 今後はやっていることが、どういうオブジェクトに対するものであるか勉強するようにすべきです。 だからシートなどの「すべてを含めて写す」のがコピーなので、シートのコピーをすれば良い。 そしてすぐ自己流でコードを作るのでなく、シートの(タブ部で右クリックから始まる)「移動またはコピー」の操作をしてマクロの記録を採って勉強するのが良いと思う。 Set ActiveSheet.PageSetup=PS のような場合、多数ある項目を1つの代入式で済むかどうかは、その都度勉強しないとならない。不可能のことがほとんど。コードで.Copyが出来るかどうかも、各オブジェクトの個別論だと思う。

makoji
質問者

補足

解答、ありがとうございます。返事が遅くなり申し訳ありません。 yorozu_yaさんへとあわせて補足させていただきます。 Copyメソッドでは、コピー場所に既存シートの前または後ろを指定することができますが、既存のシートそのものを指定することは出来ず、このメソッドを実行すると、指定した場所に新規シートが挿入されて、そのシートにペーストが行われるようです。 既存シートに雛形シートの諸々、印刷設定まで含めて、をコピーしたい場合はどうすればいいんでしょう。 Cells.Copyで取りあえずセルをコピーした後、印刷設定はそのページの.PageSetup下の各プロパティを一つづつ処理していくしかないのでしょうか。

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

Cellsをコピーするのではなく、Sheetをコピーしましょう。 Sheets("雛形シート").Copy After:=Sheets("他のシート")

makoji
質問者

お礼

解答、ありがとうございます。返事が遅くなってすみません。 imogasiさんの方にまとめて補足を書かせていただきます。 ありがとうございます。

関連するQ&A

  • Activeでないシートへのペースト

    Excel VBA シートのコピー、ペーストに関する質問です。 Sheets("Sheet1").Cells.Copy ActiveSheet.Paste これは、機能します。 今、Activeでないシート(例として "ペースト先")へのペーストしたいと 思います。ActiveSheet.Paste に対応する記述がわかりません。 worksheets("ペースト先").paste 見たいなものと想像しましたが、 だめでした。 宜しくお願いいたします。

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • シートの必要な行だけをコピーしたい。

    シートの必要な行だけをコピーしたい。 sheet1にデータを取り込み、sheet2でvlookupの関数によりデータの抽出を行っています。sheet1に取り込まれる行は、2行~2600行と幅が広いので、現状はsheet2に関してMAX2600行分のvlookup関数を設定しているのですが、行が短い場合に処理時間がかかってしまい、効率がよくありません。sheet1に取り込まれた必要行分だけをsheet2にコピーペースト展開するにはどの様な対応をしたらよいか教えて 頂きたく。 1行目ににvlookupの関数が設定してあるとして、現状は下記の通り、マクロにて2600行分コピーペーストしてあります。 Range("A1:J1").Select Selection.Copy Range("A2:J2600").Select ActiveSheet.Paste

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • Execel VBA でシートの作成後、コピペがうまくいかない。

    シートのコピー&ペーストがしたくて、以下のPGを 組みましたが、うまくいきません。 (1)(2)と二通り試してみましたが、両方だめでした。 どなたか、おわかりになるかた、教えてください。 for i = 1 To page_cnt (1)Sheets.Add ActiveSheet.Name = "請求書(控)" & i Sheets("請求書" & i).Select sheet_name = "請求書(控)" & i Sheets(sheet_name).Cells("A1").Select Selection.Paste (2) Sheets.Add ActiveSheet.Name = "納品書(控)" & i Sheets("納品書" & i).Cells.Copy Sheets("納品書(控)" & i).Paste Next

  • 【Excel VBA】シートコピー時、マクロコードはコピーしたくない

    ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

  • VBA 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

  • エクセル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]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

専門家に質問してみよう