- 締切済み
いつもお世話になっております、
いつもお世話になっております、 必要に迫られてVBAを勉強し始めました。 Sheet1をSheet1の後にコピーして、かつシート名を「発行済」と変更するにはどのようなコードを書けばよいでしょうか? 参考にしているファイルのコードだと末尾にコピーされるので、教えて下さい。 (参考コード) Sheets("Sheet1").Copy After:=Sheets(Sheet1.Count) Sheets(Sheet1.Count).Name = "発行済" また、参考コードのみだと、発行済のシートが1度作成されると、2度目にマクロを実行するとエラーが出てしまうようです。 エラーに対する処理についてのコードの書き方も教えて下さい。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Zero_0
- ベストアンサー率35% (72/201)
以下のようなコードではどうでしょうか。 Sheets("Sheet1").Copy After:=Sheets(1) Sname = Sheets(3).Name If Left(Sname, 3) = "発行済" Then Sname = "発行済" & Val(Right(Sname, Len(Sname) - 3)) + 1 Else Sname = "発行済" Sheets("Sheet1 (2)").Name = Sname Sheet1をコピーしたうえに、発行済という名前に変えます。 またこのとき、2つめのシートが発行済であれば、シート名を発行済1にさらに実行すると発行済2、発行済3というようにシート名を設定します。 条件式としては、コピーの後、3つめにあるシート名をチェックし、発行済であればその後ろの番号をカウントするようにしています。
- imogasi
- ベストアンサー率27% (4737/17069)
良いのかどうか判りませんが Sub test01() Sheets.Add(after:=Sheet1).Name = "発行済" Sheet1.Cells.Copy Sheets("発行済").Cells 'Sheets("発行済").Activate 'ActiveSheet.Paste CutCopyMode = False End Sub なんていうのもできるようです。シートのコピーとRangeのコピーなどを考えることになれば。
- myRange
- ベストアンサー率71% (339/472)
「発行済」シートについては以下の2つの場合が考えられますが。。。 ●「発行済」シートは一回作成したあとは2度と作成しない場合。 '----------------------------------------------------- Sub test() On Error Resume Next Sheets("発行済").Select If Err.Number > 0 Then Sheets("Sheet1").Copy after:=Sheets("Sheet1") ActiveSheet.Name = "発行済" End If End Sub '-------------------------------------------------------- ●マクロを実行させるたびに「発行済」シートを作成するが、 作成済みであれば削除して、新たな「発行済」シートを作成する場合 '------------------------------------------------ Sub Test222() On Error Resume Next Application.DisplayAlerts = False Sheets("発行済").Delete Application.DisplayAlerts = True Sheets("Sheet1").Copy after:=Sheets("Sheet1") ActiveSheet.Name = "発行済" End Sub '--------------------------------------- それから、質問者のコードの Sheets("Sheet1")とSheet1は別物と考えた方がいいでしょう。 以上です。
- nattocurry
- ベストアンサー率31% (587/1853)
Sheets("Sheet1").Copy After:=Sheets(Sheet1.Count) Sheets(Sheet1.Count).Name = "発行済" 2行目は()が全角文字になっていますが、ということは、実際のコードをコピペしたのではなく、書き写したということですよね。 Sheet1.Count というのは、下記間違いでしょうか? それとも、実際のコードがこうなっているのでしょうか? Sheets(Sheet1.Count) ではなく、Sheets(Sheets.Count) が正解だと思います。 Sheets.Count というのは、ワークシートの総数であり、 Sheets(Sheets.Count) というのは、一番最後(一番右側)のワークシートのことです。 Sheet1.Count だと、Sheet1の枚数になり、常に1になります。 あと、ワークシートには同じ名前を付けることはできません。 「発行済」という名前のシートが一度作成された後に、さらに新しいシートに「発行済」という名前を付けようとしているので、エラーになって当たり前です。 別の名前を付けるか、先に作った発行済シートを削除するかしないといけません。