• 締切済み

いつもお世話になっております、

いつもお世話になっております、 必要に迫られてVBAを勉強し始めました。 Sheet1をSheet1の後にコピーして、かつシート名を「発行済」と変更するにはどのようなコードを書けばよいでしょうか? 参考にしているファイルのコードだと末尾にコピーされるので、教えて下さい。 (参考コード) Sheets("Sheet1").Copy After:=Sheets(Sheet1.Count) Sheets(Sheet1.Count).Name = "発行済" また、参考コードのみだと、発行済のシートが1度作成されると、2度目にマクロを実行するとエラーが出てしまうようです。 エラーに対する処理についてのコードの書き方も教えて下さい。

みんなの回答

  • Zero_0
  • ベストアンサー率35% (72/201)
回答No.4

以下のようなコードではどうでしょうか。 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/17068)
回答No.3

良いのかどうか判りませんが 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)
回答No.2

「発行済」シートについては以下の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)
回答No.1

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になります。 あと、ワークシートには同じ名前を付けることはできません。 「発行済」という名前のシートが一度作成された後に、さらに新しいシートに「発行済」という名前を付けようとしているので、エラーになって当たり前です。 別の名前を付けるか、先に作った発行済シートを削除するかしないといけません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAの不可解(?)な動作について

    Excel 2000 VBAでの質問です。 Sheet1に以下のようなコードを書きました。 --------------------------------------------------------- Public Sub test() Application.DisplayAlerts = False Sheets("Sheet2").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "test" Sheets("test").Visible = xlVeryHidden Sheets("Sheet3").Visible = xlVeryHidden Sheets("test").Visible = True Sheets("test").Delete Sheets("Sheet2").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "test" '問題の行 Application.DisplayAlerts = True End Sub --------------------------------------------------------- このコードで期待している動作は、最終的にSheet3(xlVeryHiddenになっている)の後ろにSheet2をコピーし、その名前を「test」にするというものです。 しかし、実際にはSheet3の後ろにSheet2がコピーされるものの、名前はSheet2が「test」と変更されてしまいます。 Sheets.Countの値はSheet3をさしているはずなのですが・・・。 皆様に教えていただきたいのは、 ・この意図しない動作がなぜ起こるか ・どうすればこの問題を回避できるか です。よろしくお願いいたします。 もし初歩ミスでしたら、申し訳ありません・・・。ご指摘ください。

  • VBA シートのコピー

    シートをコピーし、挿入をシートの末尾にする場合はどうなりますか? マクロを使ってやったときに、20のシートがあったため、下記のようになりますが、これだと、2回目以降にコピーしたとき20番目に挿入されて末尾には移動しないですよね。 そこは、どうしたらいいですか?? シート名「あああ」 Sheets("あああ").Copy After:=Sheets(20) お願いします。

  • ボタン操作で元の画面から移動してしまう

    マクロで下記の記録で操作しております。 別シートにフォームコントロールで追加のボタンをつくって操作したところ コピーしたシートへ画面が移ってしまいます。 どのように追加記録したらいいかお教え下さい。 VBAは初心者です。 Sub シートコピーして追加() myNumber = Worksheets.Count Sheets("マスター").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = myNumber - 2 End Sub

  • エクセルでシート複製(マクロ)

    いつもお世話になります。 いろいろ検索して下記のコードにたどり着きましたが、c10の値のシートが「現在」のシートの左側にきてほしいのですが、afterをbeforeにすると「現在(2)」-「c10の値」になってしまいます。 ちなみに下記コードを実行すると「現在」-「c10の値」の並びになります。 欲しいのは「c10の値」-「現在」の並びです。 マクロを実行する度にシートが右に増えていくイメージです。 よろしくお願い致します。 Sub 現在() Sheets("現在").Copy after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Range("c10").Value End Sub

  • アドイン内部のシートのコピーと移動

    Excel VBAで、アドインについて質問させていただきます。 他のブックを開いている時に、アドイン自身にあるシートを、 アドイン内で移動及びコピーをしたいのですが以下のコードではエラーとなってしまいます。 移動(アドイン自身の変数 i 番目のシートを、左へ移動) ThisWorkbook.Sheets(i).Move before:=ThisWorkbook.Sheets(i).Previous コピー(アドイン自身の変数 i 番目のシートを、アドイン自身の末尾にコピー) ThisWorkbook.Sheets(i).Copy after:=ThisWorkbook.Sheets(Thisworkbook.Sheets.Count) MoveやCopyメソッドの引数を指定せず新規ブックにコピー及び移動なら可能なのですが、引数の指定に誤りがあるでしょうか?ちなみにアドイン自身の内部でシートを追加、シート削除、名前の変更は可能なようです。 どなたかご教示いただきたく、よろしくお願いいたします。

  • VBAでボタンを押すとシ-トのコピ-そして名前変更までできましたけどシ

    VBAでボタンを押すとシ-トのコピ-そして名前変更までできましたけどシ-ト名がダブル場合どうしたらいいでしょうか? ダブらないようにシ-ト名のあとに枝番号(-1.-2.-3・・・)するには・・・ご教授お願いします。 Sub sheetの複写() ' ' sheetの複写 Macro ' シ-トを末尾にコピ-します。 ' ' For i = 17 To 17 Sheets("サンプル").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = Sheets("サンプル").Range("Z" & i).Value Next End Sub が今のマクロです。 エクセル2003です。

  • Excel VBAでのシートのコピーがヴァージョン違いで出来ない?

    Excel VBAでのシートのコピーをしようとしてヘルプを参考に Sheets("master").Copy After:=Sheets("master") のようにマクロを書きました。 これでExcel2000ではちゃんとコピーしたのですが、Excel97ではコピーをしてくれません。 いくつかの端末(OSはWin95、WinNT4、Win2000)でやってみましたがExcel2000はOK、Excel97ではダメでした。 なにか原因があるのでしょうか?

  • Excel VBA 非表示の別ブックへシートコピー

    Excel2010のVBAで、別のExcelブックを非表示で開いて、 シートをコピーすると、 「実行時エラー'1004':WorksheetクラスのCopyメソッドが失敗しました。」 というエラーが出て、正しくシートをコピーすることができません。 (1)のように自分のブックへはシートをコピーすることはできるのですが、 (2)のように別のExcelブック上でシートをコピーする場合と (3)のように別のExcelブック上にシートをコピーする場合の いずれも同様のエラーになります。 どのように記述すれば(2)と(3)でもコピーすることができるのでしょうか。 ------------------------------------------------------------- Sub test()  Dim newEx As Excel.Workbook  Dim newFile As String  newFile = ThisWorkbook.Path & "\New_Book.xlsx"  Set newEx = Workbooks.Open(newFile, UpdateLinks:=0)  Application.Windows("New_Book.xlsx").Visible = False  '(1)New_BookのSheet3を自分のブックにコピーする (正常)  newEx.Worksheets("Sheet3").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  '(2)New_BookのSheet3をNew_Bookにコピーする (エラー)  newEx.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  '(3)自分のブックのSheet3をNew_Bookにコピーする (エラー)  ThisWorkbook.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  Application.Windows("New_Book.xlsx").Visible = True  Application.DisplayAlerts = False  newEx.Save  newEx.Close  Application.DisplayAlerts = True  Set newEx = Nothing End Sub -------------------------------------------------------------

  • マクロでエクセルシートのコピー

    マクロでシート1を最後尾に名前をつけてコピーしたいと思ってます。 つけたい名前は、シート2のあるセルにかいてあります。 私は下記のように書いたのですが、エラーになってしまいます。 Worksheets("Sheet2").Select newsheet = Cells(1, 1) Sheets("Sheet1").Select Sheets("Sheet1").Copy After:=Sheets(newsheet) どのようにすればシートをシート名をつけてコピーできますか? 教えてください。 エクセル97です。

  • エクセル2000のマクロについて再び

    新しいブックを作りさらに他のブックで作成されているシートをコピーして移動するというマクロを作ります。この時、新しく作ったブックの名前がBook1にならないとその時点でマクロのエラーになりなってしまいますが、たまにBook2になってしまうときがあります。必ずBook1になると指定することはできないのでしょうか。 Sheets(Array("sheet1", "sheet2", "sheet3")).Select Sheets(Array("sheet1", "sheet2", "sheet3")).Copy →新しいシートを作成 Workbooks.Open Filename:="C:xxx\○○\△△.xls" Sheets.Copy after:=Workbooks("book1").Sheets(2) →ここで、Book1が存在しないとエラーになってしまう。 お願いします。

専門家に質問してみよう