• ベストアンサー

シートを追加・名前を次月に変更、前月内容を貼り付け

エクセルでマクロを使って、シートを追加して、シート名を次月となるように変更したいのです。欲を言えば、今のシートをコピーして新しく作ったシートに貼り付けまでできれば最適です。例ですが、今操作中のシート名が3月とします。内容は3月の集計表を作成です。ここでマクロを実行して、新しくシートを追加しシート名を4月としてシートの内容は3月の内容をコピーして貼り付けしたいのです。仮に5月でも実行すれば6月のシートが作成できるようにしたいのです。ご教授ください。マクロは初心者です。操作はできます。

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

こんなんでどうですか。 --- Sub test() Dim i As Integer '最後のシートをコピーしその後ろに追加 Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count) '名前を変更 i = Left(Sheets(Sheets.Count - 1).Name, Len(Sheets(Sheets.Count - 1).Name) - 1) Sheets(Sheets.Count).Name = IIf(i + 1 > 12, 1, i + 1) & "月" End Sub

VODKA75
質問者

お礼

ご回答ありがとうございます。変数の宣言をして「最後のシートをその後ろに追加という」発想が自分には思いつきませんでした。確かに、自分の用途としては、最後を増やすこと意外ありません。それから12月から1月の切り替えですが、IIf(i + 1 > 12, 1, i + 1) & "月"とても参考になりました。自分には非常に役に立ちます。ありがとうございます。

その他の回答 (3)

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

ここへ質問する前に、操作をしてマクロの記録をなぜ採らないのか。 そして次の月にはどこをどう変えればよいか、を考えることだ。 Sub Macro3() Sheets("Sheet1").Select Sheets.Add Sheets("Sheet4").Select Sheets("Sheet4").Name = "5" End Sub (1)この場合に前の月のシート(名)はどういう風に捕まえるか問題 こんなことも、質問で「次月」と済ましてしまうようでは、プログラムは進まない。 今月シートとは何かから考えないと。 必ず今月シートを開いて、完成したVBAを実行するなら、ActiveSheetなどの捉え方を使えるが、不便では?。 シート名をそもそどうするかを考えないと(質問に明記して質問しないと)。 (2)次の月をどうして決めるか。、特に12月の次は1月にしなければならないが、どう計算などするか。 日付シリアル値に持ち込んで、月部分に+1するのが確実なように思う。 月数字以外と、月数字部分を分ける シート名から年、月、1の日を作り、そこから関数で年、月+1,1の日を作り、年、月の部分を文字列化して、月数字以外部分を加えるなど、どうかな。 人間にシート挿入のシート名を毎度答えさせる手もあり、結構安定性があるようにもおもうが。 (3)3月の内容をコピーして貼り付けしたいのです これもマクロの記録でコードがわかる。次の月になると、データ数の増減などで、コピーするセル範囲は変わるのかな(フォーと尾が決った表で固定なのか?)。

VODKA75
質問者

お礼

ご回答ありがとうございます。まず、ごもっともなご指摘ありまがとうございます。素人ゆえに、将来恥ずかしい質問もすることもあると思います。自分なりに検索したり、記録などで読み取ろうともしましたが、解決には至らず、質問しました。わからないから質問するという人もいることをご理解ください。内容に至っては、12月と1月の件などその考え方の基礎を理解できました。その難しさもわかりました。やって覚えるというよりは、基本の考え方を地道に蓄積していくしかないということも理解できました。マクロについては、ご回答のように「5」のシートができました。ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 12月の場合を考慮していませんでした。 ↓のコードに訂正してください。 Sub test() Dim i As Long i = WorksheetFunction.Substitute(ActiveSheet.Name, "月", "") * 1 ActiveSheet.Cells.Select Selection.Copy Worksheets.Add after:=ActiveSheet ActiveSheet.Paste If i = 12 Then ActiveSheet.Name = "1月" Else ActiveSheet.Name = i + 1 & "月" End If Application.CutCopyMode = False ActiveSheet.Range("A1").Select End Sub 何度も失礼しました。m(__)m

VODKA75
質問者

お礼

ご回答ありがとうございます。また、訂正版もありがとうございます。 実際に自分もやってみましたが、13月になりました。しかし、そういうことも大事なことですから 実際に、この改訂版との違いで、すごく役にたちました。もしも改訂版が最初に投稿されていたら自分はそのことに、気付かずにいた気がシマス。参考になりました。改訂版できました。12月の次は1月になるという定義など、少しづつわかってきました。ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 一例です。 同一ブック内で同じSheet名を付けることはできませんので、 今操作中のSheet名の月の翌月sheet名はないということが大前提です。 Sub test() Dim i As Long i = WorksheetFunction.Substitute(ActiveSheet.Name, "月", "") * 1 ActiveSheet.Cells.Select Selection.Copy Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Paste ActiveSheet.Name = i + 1 & "月" Application.CutCopyMode = False ActiveSheet.Range("A1").Select End Sub こんな感じではどうでしょうか?m(__)m

関連するQ&A

  • 前月分を次月シートに繰越できるマクロについて

    今Excel2003で月ごとの会員名簿を作っています。 新規でシートが作られて月名と各項目を残したまま 次月シートが作られるというマクロを是非教えていただきたいです。 その際前月の会員名だけは消えていることが望ましいのですが。。 なるべく多数の初心者でも触れるように作成後はオートシェイプか何かにマクロを登録してクリックするだけで上記の作業を行ってくれるという形にしたいと思っています。 宜しくお願い致します。

  • sheetを追加する

    宜しくお願いいたします Excel2010を使用しています 家計簿を作成しています、1月分は関数等入れて完成しました 1~12月までシートにコピーしましたが、毎年これを使うとなると この作業が面倒で、マクロでどうにかならないか試してみましたが 上手くいきません、 何か、マクロを使い1月のシートを12月までシート名を変えながら 張り付けるマクロは有るでしょうか(シート名が1月・・・・・12月まで関数等含むシートが出来る)

  • マクロでひとつ前のシートの名前を変更する方法

     エクセルのマクロにてシートの名前変更がうまく行かず困っています。 内容はsheetの名前が「2-1」「2-2」「2-2 (2)」「2-2 (3)」「2-2 (4)」だとします。 シート名に枝番があるsheetの中の文章をコピーし新しくBookを開きそこに貼り付けていく、というマクロを作成しました。 しかし「2-2」は枝番が無いので計算するsheetと認識されません。 Sheets("2-2").Name = "2-2 (1)" にして出来ることは出来るのですが、デバックになりチェックし修正した後に、実行すると「2-2 (1)」に変更してしまったので、「2-2」なんてシートは無い!となりますよね? そこで、また実行したい時は2-2シートの枝番を消して実行したり、エクセルを全部閉じてから実行していました。 そこで、もし「2-2」なら「2-2 (1)」にして、「2-2 (1)」がすでにあるなら名前はそのままにし、実行というマクロの作成方法を教えていただきたいです! それと、「2-2 (2)」の前のシートを強制的に「2-2 (1)」にする。のようなマクロがあったらそれも教えて頂けたらうれしいです。お願いします!

  • エクセルVBA シートの追加と名前の変更

    エクセルに「原本」シートがあり、マクロを実行すると原本シートを5シート(5日分)追加し、 (1)一つ目に追加したシートのB2のセルに「追加する日の日付け」を入力し、 シート名にその日付をyymmdd形式で名前を付け、 (2)二つ目に追加したシートのB2のセルに「追加する日の次の日の日付け」を入力し、 ・・・同様の処理・・・ (6)一つ目の追加したシートをアクティブシートにする。 というように、連続した5日分のシートを追加したいと考えています。 VBAの全くの初心者ですので教えていただけると大変助かります。 そんな素晴らしいことが短時間で教えていただけるものなのでしょうか。

  • シートコピーと値の転記 シート名変更マクロを

    エクセル2010で マクロのご教授をお願いいたします。 BOOK1の Sheet1 A1~A10に 数値1000が入力されているとして Sheet1のシートのコピーを作成 Sheet1にもどり A1~A3の値だけコピーして 作業列C1に 値を貼り付け A1~A10 をクリアーにしたのちに  ※↓が うまくいきません。 A1の値→ A8 A2の値→ A9 A3の値→ A10 に入力 させるマクロは どうなるでしょうか? マクロの記録で いろいろと やってみましたが どうも ※の部分が うまくいきません どう考えてもエクセルに対しての 理解不足だと思われますが、ご教授のほどお願いします。 おこなった自動マクロの記録は↓です。 マクロの記録開始する 名前 シートコピー Sheet1を右クリックして移動またコピー コピーを作成にチェックをいれ OK コピーシートが作成される。 Sheet1をクリックしなおして A1からA3をコピー  作業列として C1に 形式を選択して貼り付け 値 A1~A10を delete でクリア C1~C3を選択 コピー A8に 形式を選択して貼り付け 値 マクロの記録終了。 あと Sheet1をコピーするさいに シート名を前日の日付に自動的に変更できればと いいなと 考えておりますが できるのでしょうか? 例えば、本日でいえば シート名→ 0112 のような シート名を変更できればすてきだと おもいます。 どうぞ よろしくお願いします。

  • 同ブック内でシートを追加したときにシート名と連番が

    WindowsXP EXCELL2003 いつも御世話になります。 何とか自分で作りたく色々調べてトライしましたが分からなくなりご教授を願う事になりよろしく御願いします。 仰ぎたいのは 納品書と請求書が一緒になった ・シート名「納請書1」、 がA4で1枚になったシートがあります。 とりあえずこの納請書なるものは3シート用意しています。 受注が追加されるごとに「納請書3」のシートコピーをして「納請書4」その都度追加します。 これをマクロの実行とか何かの方法で追加することは可能でしょうか。 もし可能ならばいい方法をご指導いただけませんでしょうか。 取り合えず1例で下記のマクロを Sub シートの追加とプロパティ操作() Dim NewWS As Worksheet Set NewWS = Worksheets.Add(After:=Worksheets("納請書3")) With NewWS .Name = "納請書4" .Columns.ColumnWidth = 20 End With End Sub このやり方は私か調べた物でトンチンカンかも知りません。 「マクロの実行」 Sheet3シートの追加とプロパティ操作 で「実行」すると次のように出ます。 「インデックスが有効範囲にありません」

  • 追加するシートに集計される串刺し計算について

    エクセルの串刺し計算で質問です。 4月(集計) 3月 ひな形 ※4月のシートにこれをいれてます。 =SUM('4月月初:ひな形'!G21) この順番だと、4月のシートに4月からひな形までのシートが合計されますが、 次の月には5月のシートが先頭に追加され、 5月から3月の計算を入れたいです。 5月(集計) 4月 3月 ひな形 ひな形をコピーして最初のシートとひな形の間に挟むと 集計シートに集計されると思いますが、 今回の集計シートは固定した集計シートではなく 毎回新しく追加するシートが集計シートとなります。 どうやったらよいかわからないので、教えて頂けると助かります! ※質問内容がよくわからないようでしたらご指摘ください。。  再度ご説明します!

  • 並べ替えマクロでシートの名前を変更した場合

    以下のマクロを記録しました。 「Sheet1」でA1:B20を選択して、昇順の並べ替えを実行して終了です。 VBEで中身を確認すると、途中にシート名の"Sheet1"が記述されています。 この内容だと、シート名を変更したり、別のシートで実行する場合は、マクロのシート名の記述を変更しないと実行できません。 これだと不便なので、シート名にかかわらず実行できる昇順マクロを作りたいのですが、何か方法はありますか。

  • 「マクロの記録」でシート名を変更する方法

    エクセル2007を使っています。マクロの記録を使って、シート名の変更を行いたいのですが良い方法あるでしょうか。 Sheet1のある表を新しいシート(一回目はSheet2になりますが)に貼り付け、その新しいシートの「A2をコピーしてシート名に貼り付け」という事が出来ればよいのですが。 新しくなった名のシートは切っとって違うところで使います。毎回新しいシートが追加されることになりますし、コピーしたいA2も毎回異なりますので、【Sheets("Sheet2").Name =○○ 】では次回は新しいシートはSheet3になってしまうので、具合が悪いのです困っています…。 よろしくお願いいたします。

  • vba エクセルシートの追加、名前の変更について

    エクセルvbaについて教えてください 新しいシートを一番右に作成し、その新規作成したシートの名前を変えたいです Sub Sample() Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = "結果1" End Sub と作成しました マクロを実行したら、「結果1」という名のシートが一番右に作成されます その後、実行をしたら「結果2」、さらに実行したら「結果3」といった感じにどんどん「結果+数字」のシートを作成したのですが、今のままでは「結果1」というシートしか作成されません 「結果2」、「結果3」、・・・・エンドレスに作成するようにするにはどうしたらよいのでしょうか ―――――――――――――――――――――――――――――――――――― なぜこのようなことをしているかといいますと、AdvancedFilterでxlFilterCopyを利用し、抽出した結果を新しいシートに作成するようにするのが最終目標です それで、まずAdvancedFilterでデータを反映させる新しいシートを作成することに取り組んでいるところです もし分かる方がいましたら、AdvancedFilterでxlFilterCopyする際、上で説明しました新しいシートが作成できた場合、CopyToRangeをどのように記載すればいいのか分かればそれも教えていただけると助かります よろしくお願いします

専門家に質問してみよう