Excel2007 VBAでワークシートのコピー方法

このQ&Aのポイント
  • Excel2007において複数シートの最後尾をコピーし、新しいシート名を付ける方法について教えてください。
  • 現金出納帳のファイルには「23年7月」「23年8月」「23年9月」の3つのシートがあります。マクロ実行時に、「23年9月」のシートをコピーし、新しいシート「23年10月」を作成したいです。
  • 使用機種はWindows Vista Excel2007で、質問者はVBAの初心者です。Excel2007において、最後尾のシートをコピーするコードを教えてください。
回答を見る
  • ベストアンサー

(Excel2007 VBA)ワークシートのコピー

●質問の主旨 Excel2007において常に複数シートの最後尾のシートをコピーし、 その最後尾のシートの後ろに新しいシート名を付けるには 以下のコードをどのように書き換えればいいでしょうか? ご存知の方よろしくお願いします。 ●質問の詳細 今、「現金出納帳」を作成しています。 「現金出納帳」のファイルの中に以下のように3つのシートが並んでいます。 「23年7月」 「23年8月」 「23年9月」 今月末にはマクロ実行によって「23年9月」のシートをコピーし、 「23年7月」 「23年8月」 「23年9月」 「23年10月」 という並びにしたいと思います。 次月末は「23年10月」の後に「23年11月」のシートをコピーするつもりです。 ●コード Worksheets("23年9月").Copy After:=Worksheets("23年9月") ※使用機種はWindows Vista Excel2007 で、私はVBAの初心者です

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

  • ベストアンサー
  • jin34
  • ベストアンサー率80% (17/21)
回答No.3

質問者様はVBA初心者とのことですので下準備はいりますが簡単なやり方で行きます。 シート名のリストを別シートに作り、追加したシート名をそこから拾ってくる流れです。 1.ワークシートを追加し、名前をつけます。ここでは「月リスト」にします。 2..月リストシートをワークブックの一番左に移動させておきます。 3.月リストシートのセルA1から下に既存シートの名前と、先の年月の名前を入れていきます。 ここではセルA1=月リスト、A2=23年7月、A3=23年8月、A4=23年9月........という具合。セルの書式は文字列にして行なってください。 4.VBAエディターを開き、「挿入」→「標準モジュール」。追加したModule〇に以下のコードを記述。 Sub test() Dim i As Integer i = ThisWorkbook.Worksheets.Count '既存のシート数を取得 Worksheets(i).Copy after:=Worksheets(i)   '最終シートをコピーして後ろに挿入 Worksheets(i + 1).Name = Sheets("月リスト").Cells(i + 1, 1).Value  '月リストからシート名を取得してシート名変更 End Sub

dradra33
質問者

お礼

jin34様 ご回答ありがとうございます。 教えていただいた手順通り作成したら、 新しいシートに新しい任意の名前(23年10月)が 作成できました。助かりました

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

ANo.1です。 必ず月末(月をまたがない範囲で)に行なうのなら、 Worksheets(Worksheets.Count).Copy After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = Format(DateSerial(Year(Date), Month(Date) + 1, 1), "e年m月") こんな感じで如何でしょう。

dradra33
質問者

お礼

n-jun様 ご回答ありがとうございます。 Worksheets(Worksheets.Count).Name = Format(DateSerial(Year(Date), Month(Date) + 1, 1), "e年m月") のコード参考になりました。 新しく作成したシートに「10月1日」の日付を 入力するのその時の参考にさせていただきます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

一番右のシートを更に右にコピペするなら Worksheets(Worksheets.Count).Copy After:=Worksheets(Worksheets.Count) こんな感じかな?

dradra33
質問者

お礼

n-jun様ご回答ありがとうございます ご回答について補足質問がございますので、 そちらの方もご確認いただければ幸いです。

dradra33
質問者

補足

n-jun様 追加の質問で恐縮です。 ご回答のコードで最後尾のシート(一番右のシート)を さらにコピーすることができました。 そのコピーした時に新しくできたシートに新しい名前を 付けるためにはどうすればよいでしょうか? 新しくできたシート名が、「23年9月(2)」ではなく、 、「23年10月」など任意の文字列の名前にするには どうすれば良いでしょうか? もし、ご存知であれば、幸いです。 たびたび恐れ入りますがよろしくお願い申し上げます。

関連するQ&A

  • エクセル VBA シートのコピーが上手く出来ない

    原因が分かりません。宜しくお願いします。 エクセルVBAで、フィルターを掛けたシートを別シートへコピーしています。 問題なく出来ていたルーチンでしたが、他の作業の影響か、 気がついたらコピー出来なくなっていました。 他のシートでも同じ方法でコピーを行っていますが、問題ありません。 問題のコーディングは以下のとおりです。 Worksheets("work2").Unprotect Worksheets("work2").Range("A:Z").ClearContents Worksheets("コピー元").Range("A5").AutoFilter Field:=6, Criteria1:=フィルタ請求年1, Operator:=xlOr, Criteria2:=フィルタ請求年2, VISIBLEDROPDOWN:=True Worksheets("コピー元").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("work2").Range("A1") Worksheets("work2").Protect Worksheets("コピー元").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("work2").Range("A1") の箇所では、エラーメッセージもでませんが、コピーもされていないことを確認しています。 どのような原因が考えられるでしょうか? または、どのような方法で原因追求が出来るでしょうか? ご回答お待ちしています。

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

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

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

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3コピー元ワークシート3 という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • Excel2007VBAシートコピーとマクロ保存

    ●質問の主旨 複数のシートのファイルにおいて最終シートだけをコピーし、 かつそのファイルの標準モジュールも含んだファイルを保存するには、 下記のコードをどのように書き換えたらいいでしょうか? ご存知のかたご教示願います。 ●コード Sub 保存() Dim flname As String flname = "D:\医療週報\VBA試作\" & Format(Date, "yyyy年mm月") & ".xlsx" ActiveSheet.Copy ActiveWorkbook.SaveAs flname ActiveWorkbook.Close End Sub ●質問の補足 1)マクロで「保存」を実行するときは手作業で必ず最終ページを開いています(アクティブにします)。 2)上記コードのうち".xlsx"では最終シートだけをコピーできますが、 マクロの保存ができません。また".xlsm"にするとエラーが出ます。 ".xls"にすると複数のシートが全てコピーされた上に、マクロの保存ができていません。 3)私はVBA初心者です。

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3ワークシート という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • Excel2007 VBA 最終行の特定セルの取得

    ●質問の主旨 A列の入力を欠いた最終行の特定セルの取得及び転記について ご教示ください。 ●質問の詳細 下記の要領で現金出納帳を作成しています。 1. 項目は以下の通りです。  A     B     C      D   E        F 日付 摘要1 摘要2 収入金額  支出金額 残高金額 2. 下の行に向かって1.の具体的内容を入力していきます。 3. 同じ日に複数の項目がある場合、その日の先頭項目のみA列に 日付を入力し、2番目の項目には、日付を入力しない。 4. 当月の一番最後に入力されている項目のF列の残高金額をもって、 次月の残高(繰越残高)とする 5. 当月の残高(繰越残高)は、雛型シートを用意し、 そのシートのF3セルに入力する。 ※ 一日に必ず複数の項目を入力するため、最終行には 日付の入力を欠いていることがほとんどです。私案のコードでは 「最終日」の1番目の残高は拾えても、「最終日」の最終行を 拾うことができません。コードをどのように書き換えたらよろしい でしょうか? ●私案のコード Sub 繰越_Click() Dim i As Integer '既存のシート数を取得 i = ThisWorkbook.Worksheets.Count '最終シートをコピーして後ろに挿入 Worksheets(i).Copy after:=Worksheets(i) '月リストからシート名を取得してシート名変更 Worksheets(i + 1).Name = Sheets("月リスト").Cells(i + 1, 1).Value '新しく作成したワークシートについて以下の処理を行う With ActiveWorksheets '当月の残高を次月に繰り越す (残高が記入されている最終行,F列の値を次月シートのF3セルに代入する) Range("F3") = Worksheets(i).Range("A1045876").End(xlUp).Offset(0, 5).Value End With End Sub 使用機種はWindouws Vista Excel2007です。当方はVBA初心者です。   

  • 【Excel VBA】シートコピー時、マクロコードはコピーしたくない

    ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

  • PerlでExcelのワークシートを同じファイル内にコピーしたりワーク

    PerlでExcelのワークシートを同じファイル内にコピーしたりワークシートの名前を変更することは可能でしょうか? 環境は、WindowsXPpro、IIS5.1、PerlV5.10でWin32_OLEモジュールを使用しています PerlでExcelのワークシート内セルに書き込み・セルからの読み出しはできています。 VBAではワークシートをコピーする場合は、 「Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")」 でコピーできるようですが、 Perlではどう記述すれば良いか分かりません。 Perlではワークシートをコピーしたりワークシートの名前を変更することは出来ないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Excel2007VBA セル範囲の選択について

    ●質問の主旨 任意に変わる、最終行でデータ入力がされているセルを取得し、 かつそのセルを別のセルと組み合わせて範囲選択するためには どうすれば良いでしょうか? 具体的には1.の記述と同じにするためには,2.の記述を どのように変えたらいいでしょうか?ご存知のかたよろしくお願いします。 1. Range("A3:E50").ClearContents 2. Range("A3:Range("A1").End(xlDown).Offset(0, 4)").ClearContents ●質問の詳細 1. 現在現金出納帳を作成しています。 当月が終わったら次月用として当月用のシートをコピーします。 2. コピーするシートの雛型は同じですが、収支項目、収支金額等は、 一旦クリアします。 3. "A3:E50"は収支項目、収支金額の範囲で、 E50はシートの体裁を合わせるための名目的なセルです。 ※ 現金出納帳なだけにE50の位置は毎月変わります。 収支項目の多い月は月中に行を挿入して、 最終セルがE60やE75になるかもしれません。

専門家に質問してみよう