OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.214982
  • 閲覧数122
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 12% (4/33)

シートのコピー&ペーストがしたくて、以下の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
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 68% (791/1163)

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

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

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

その他の回答 (全2件)

  • 回答No.2
レベル11

ベストアンサー率 33% (102/305)

まず(1)について Sheets("請求書" & i).Select  ここで、コピー元のシートを選択しているわけですね。  これをメモリにコピーしないといけませんね。    ↓ Sheets("請求書" & i).Select Selection.Copy ですね。次に、 sheet_name = "請求書( ...続きを読む
まず(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)の場合も、コピー先のシートをアクティブにしていません。
まずコピー元のシートをコピーし、貼りつけるシートをアクティブにしてペーストしてみてはどうでしょうか?

  • 回答No.3
レベル14

ベストアンサー率 28% (4323/15250)

PasteSpecialではどうでしょう。エクセル2000なら出来ます。97ではどうかな。下記をModule1にいれて、Sheet1のA1に仮に「123」を入力し実行したら、各シートのA1に「123」が入りました。 ---------- Sub aaa000() page_cnt = 3 Worksheets("sheet3").Activate Range("a1 ...続きを読む
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になるようです。この点充分自信がないのでご自分でもテストして
勉強してください。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ