前回作成したユーザーフォームの記事に関連して今回は雛形などの特定のシートをコピーするマクロを考えてみましたので考え方を整理しておきます。
リストに記載した名前の数だけ特定シートをコピーして、シート名をリストに記載した名前に変更するマクロ
今回作成したマクロはこんな感じで動作します。動画をみてもらうと早いと思います。
動画でも確認できる通り、「ひな形」シートにコピーする元となるデータを作成しておき、「名前リスト」シートのA列に名前を記載しています。
マクロの実行ボタンをクリックすると、この名前リストに記載された数だけ「ひな形」シートをコピーして一番右側にもってきます。
その後、コピーしたシートの名前を「名前リスト」に記載されている名前に変更するというものです。
コードはこんな感じです。いろんな書き方があると思うのでこういうやり方もある程度で見てもらえれば。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | Sub sheet_copy() '■「名前リスト」シートに記載された名前の数だけ、 '■「ひな形」シートをコピーしてコピーしたシート名を変更するマクロ '■変数宣言 Dim ws As Worksheet Dim i As Long Dim lastdata As Long lastdata = Sheets( "名前リスト" ).Cells(Rows.Count, 1). End (xlUp).Row Set ws = Sheets( "ひな形" ) '■処理実行部分 For i = 2 To lastdata ws.Copy after:=Sheets(Sheets.Count) With ActiveSheet .Name = Sheets( "名前リスト" ).Range( "a" & i).Value .Range( "i3" ).Value = .Name End With Next i MsgBox "done" End Sub |
特定のシートをコピーして一番右側にもってくるにはcopy after:=を使う
少しだけ、マクロの内容の説明をしておこうと思います。
繰り返しの処理である「for~nextステートメント」や「lastdata」等の変数の宣言に部分に関しては過去記事で触れていますので割愛しています。
特定のシートをコピーして右側に持ってくるには「copy after:=()」としてあげると上手くいきます。
この部分です↓

今回は「ひな形」シートについては変数「ws」に格納して使っているので、この部分は実質的には下記コードと同じになります。
「sheets(“ひな形”).copy after:=sheets(sheets.count)」
シートの一番右側を取得するにはsheets.countを使う
シートの一番右側は「sheets.count」で取得することができます。
一番右側を取得するというよりかは、Excelのシートが何枚あるかを「sheets.count」で把握することができるというのが正しいと思いますが。
このようにシートが3枚存在する状態で

下記のマクロを実行すると↓
1 2 3 4 5 | Sub test() MsgBox Sheets.Count End Sub |
3と表示されます。存在するシートの数が3つだからです。

シートの数を増やしてみて再度同じマクロを実行してみます↓

この状態でさきほどのマクロを実行すると↓

こうなります。
これがsheets.countの動きになります。
これとcopy after:=を組み合わせることでコピーしたひな形シートをシートの一番右側に持ってくることができるようになります。
シートをコピーすると必ずコピーした先のシートが選択状態になるという特徴
最後にこの部分の説明を。なぜ「activesheet」としているかについてです。

マクロを使ってシートをコピーするとコピーして追加したシートが必ず選択状態(アクティブ)になるという特徴があります。
例えば、このようにシートが3つある状態で、シート3が選択状態(アクティブ)になっているとします↓

この状態で下記のマクロを実行すると、シート1をコピーしてシート3の右側に追加します↓
1 2 3 4 5 | Sub test() Sheets(1).Copy after:=Sheets(Sheets.Count) End Sub |
実行後にシートを確認してみると、追加されたシート「sheet1(2)」が選択状態になっていることが確認できます↓

この特徴を利用して、シートの名前を変更したり、決められたセルにデータを入力することにしています。
まとめ
リストに記載した名前の数だけ特定シートをコピーして、シート名をリストに記載した名前に変更するマクロを考えましたので記事にしました。
わざわざマクロを使わなくてもExcelの関数でも処理が可能ですが、人数が50人など大人数になるとシートをコピーしてシート名を変える作業は地味に面倒なのでそういった場合は今回のやり方の方が早く処理ができるかもしれません。
【本日の近況報告】
マクドナルドの限定味のシェイク、カルピス味を購入。安定感がありますね。
東京に住んでいる友人から7月に帰省するという連絡を郵便ハガキで受け取りました。
それはいいんですが、その郵便ハガキに貼っていた切手代が間違えていたようで、不足分21円をこっちが負担するハメになりました。新しい嫌がらせの方法を学びました。
【本日の1曲】
Bombshell rocks/1.80 Down
スウェーデンのパンクバンド、ボムシェルロックスのストリートパンク全開の1曲。十数年ぶりに思い出して聴いてみました。
スケボーとかしながら聴くと映えるんでしょう。
ジメジメした感じを吹き飛ばすスカっとしたパンクナンバー。