• ベストアンサー

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

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

原形を変えずに少し修正しました。(1)のみ。前後のことは分かりませんが、シートを追加して内容をコピーするはずです。『(控)』の()が全角、半角と違っている見たいですが、質問の時の入力ミスですかね。 VBEのHelpを見ると、違う書き方もあります。 ご参考に。デハ。  Sheets.Add  ActiveSheet.Name = "請求書(控)" & i  Sheets("請求書" & i).Cells.Copy  sheet_name = "請求書(控)" & i  Sheets(sheet_name).Select  ActiveSheet.Paste

その他の回答 (2)

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

PasteSpecialではどうでしょう。エクセル2000なら出来ます。97ではどうかな。下記をModule1にいれて、Sheet1のA1に仮に「123」を入力し実行したら、各シートのA1に「123」が入りました。 ---------- Sub aaa000() page_cnt = 3 Worksheets("sheet3").Activate Range("a1").Copy For i = 1 To page_cnt Sheets.Add ActiveSheet.Name = "請求書(控)" & i ' Sheets("請求書" & i).Select sheet_name = "請求書(控)" & i ' Sheets(sheet_name).Cells("A1").Select ' Selection.Paste ActiveSheet.Range("a1").PasteSpecial Next i End Sub 私の経験では、CopyはRangeを指定してRange("a1").Copyの ように出来る。ActivateSheetにしてからでなくてもWorksheets("sheet3").Range("a1").Copyと出来る。 しかしPasteはActiveSheetに対してしか出来ない。 Rangeに対して出来ない。私も何回も失敗して今だに良く なぜそうするのか分からない。初めての者を引っ掛ける 腹の立つところ。「どうせマイクロソフトが決めたことだもの」。 ActiveSheet.Pasteしかできない。PasteSpecialならそれが出来る。 なおSheets.Addすると挿入したSheetがActiveになるようです。この点充分自信がないのでご自分でもテストして 勉強してください。

回答No.2

まず(1)について Sheets("請求書" & i).Select  ここで、コピー元のシートを選択しているわけですね。  これをメモリにコピーしないといけませんね。    ↓ Sheets("請求書" & i).Select Selection.Copy ですね。次に、 sheet_name = "請求書(控)" & i  ここでコピー先のシート名をつけているのですね。  でもここでsheet_nameに代入しないで、  シートを作成してシート名をつけた時に代入したほうがいいとおもいます。 ↓ Sheet.Add ActiveSheet.Name = "請求書(控)" & i sheet_name=ActiveSheet.Name そして貼りつけるシートの指定です。 Sheets(sheet_name).Activate Sheets(sheet_name).Range("A1").Paste 従って、(1)は Sheet.Add ActiveSheet.Name = "請求書(控)" & i sheet_name=ActiveSheet.Name Sheets("請求書" & i).Select Selection.Copy Sheets(sheet_name).Activate ActiveSheet.Paste と、してみてはどうでしょう。おおざっぱなので、間違ってるところがあるかもしれません。 (2)の場合も、コピー先のシートをアクティブにしていません。 まずコピー元のシートをコピーし、貼りつけるシートをアクティブにしてペーストしてみてはどうでしょうか?

関連するQ&A