• ベストアンサー

エクセルでシートコピーするマクロについて

マクロ初心者です。宜しくお願いします。 エクセルで一つのSheet1があります。そのSheet1には、一覧表があります。マクロを実行することで、Sheet1の後ろにSheet2を作成して、Sheet1と同じ一覧表をコピーして表示できるようにし、それを、マクロを実行すれば、ワークシートが一枚追加され、Sheet2のシート名になり、シートを追加する度にシート名が、Sheet3、Sheet4、Sheet5となるようにしたいです。 分かりづらい説明ですが、宜しくお願いします。

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

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

普通エクセルには、新規ブックを開いたときのシート数が決められます。3が多いと思います。 .SheetsInNewWorkbook = 3 とかです。 するとシート名はSheet1、Sheet2、Sheet3という名前にとりあえずなります。 質問は具体的にシート名を書いてくれているのは良いが、上述の名前とぶつかります。それをあえてSheet2とかに拘るなら、一旦シートを削除したり、名前を別の名前に変えないとなりません。 ーー 質問としてはシートを増やした後のシート名は自動的には Sheet1(2)のようになるが、したい名前は A.ルール化した名前「シート1」「シート2」 B.前もってシートのセルに入力しておく などしないといけません。 ーー (1)シートを増やす・コピーする程度のVBAは解説書・WEBに必ず載ってます。 1冊も本を読んでないのでは? (2)エクセルVBA学習は、エクセルの操作や機能、状況を勉強するのと、表裏一体です。VBAのコードだけ知ろうとしても無理です。マクロ初心者でも、必要最小限、エクセルを知らないのではダメです。質問にそれが伺えます。 ーー Sub test01() n = Sheets.Count 'MsgBox n Sheets("Sheet1").Copy after:=Sheets(n) ActiveSheet.Name = "シート" & n + 1 End Sub ーー .Name Sheets.Count Sheets(インデックス番号)の意味 を勉強してください。

happy5541
質問者

お礼

ありがとうございます。 マクロについては、全く無知です。 これから頑張って勉強していきます。

その他の回答 (4)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#01です >コピーするシートは、Sheet1です Activesheet.copy を Worksheets("Sheet1").Copy に変えるだけです 初心者とはいえマクロをさわることがあるなら、ヘルプを見るとか参考書を見るとか、少しは自分で調べないとスキルアップしませんよ

happy5541
質問者

お礼

おっしゃるとおりです。 少しずつ勉強していきます。 また、機会があれば宜しく御願いします。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#2です。 補足です。 最初のシート名を Sheet(1) という名前にしておけば、#2のマクロを実行すると Sheet(2)、Sheet(3)、Sheet(4)という名でコピーされていきます。 実用上問題となる場合はこの回答は無視してください。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

シート名にこだわらなければ Sub test()  ActiveSheet.Copy after:=ActiveSheet End Sub 参考>http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page2.htm

happy5541
質問者

お礼

ありがとうございました。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

エクセルでSheet1シートのコピーを行うと、シート名は「Sheet1(2)」になります。これをSheet2、Sheet3のようにしたいということでしょうか?  以下はアクティブシートをSheetX(Xは既存複数シートで最大の数字)のXの次に大きな数字の名前でCOPYするマクロです。 マクロはALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 Sub Macro3() Dim MaxSheet As Integer Dim strShNo As String Dim sh As Worksheet  For Each sh In Worksheets   strShNo = Application.Substitute(sh.Name, "Sheet", "")   If IsNumeric(strShNo) Then    If MaxSheet < Val(strShNo) Then     MaxSheet = Val(strShNo)    End If   End If  Next sh  Activesheet.copy after:=Worksheets(Worksheets.Count)  ActiveSheet.Name = "Sheet" & MaxSheet + 1 End Sub

happy5541
質問者

補足

早速ありがとうございます。 早速試さしてもらいました。もう少し御願いします。 コピーするシートは、Sheet1です。Sheet1を原紙として使用したいと思っています。 宜しく御願いします。

関連するQ&A