プロが教えるわが家の防犯対策術!

シートのコピー&ペーストがしたくて、以下の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

A 回答 (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になるようです。この点充分自信がないのでご自分でもテストして
勉強してください。
    • good
    • 0

まず(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)の場合も、コピー先のシートをアクティブにしていません。
まずコピー元のシートをコピーし、貼りつけるシートをアクティブにしてペーストしてみてはどうでしょうか?
    • good
    • 0

原形を変えずに少し修正しました。

(1)のみ。前後のことは分かりませんが、シートを追加して内容をコピーするはずです。『(控)』の()が全角、半角と違っている見たいですが、質問の時の入力ミスですかね。

VBEのHelpを見ると、違う書き方もあります。 ご参考に。デハ。

 Sheets.Add
 ActiveSheet.Name = "請求書(控)" & i
 Sheets("請求書" & i).Cells.Copy
 sheet_name = "請求書(控)" & i
 Sheets(sheet_name).Select
 ActiveSheet.Paste
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!