Excel。マクロ30。4月~9月までの各シートを挿入するにはどうしたらいいの?
<Excel VBA:シートの挿入>
4月・5月…9月と、6枚のシートを挿入して、シートの名前を入力してというのは、
作業からすれば、大した処理ではないのですが、
ただ単に、『面倒』な訳でして…
Excelの実務でこのような『面倒』というのが登場した時には、マクロ。
Excel VBAで簡単にできないのかな?と考えたくなるところですね。
ということで、今回は、まず、シートの挿入。名前の変更。
そして、連続する名前のシートを大量に挿入する方法を紹介してきます。
まず、シートを挿入して、挿入したシートに上期集計という名前を付ける、
Excel VBAのコードを作ってみましょう。
Sub シートを挿入する()
Worksheets.Add
ActiveSheet.Name = "上期集計"
End Sub
一行目は、ワークシートを挿入します。Addメソッドですね。
二行目は、挿入したシートの名前を、上期集計にするというものですね。
これでもいいのですが、一行することが出来ますので、
次のように修正しちゃいましょう。
Sub シートを挿入する()
Worksheets.Add.Name = "上期集計"
End Sub
Addメソッドに、Nameプロパティとう属性がありますので、
これでシートを挿入してシート名を上期集計にすることが出来ます。
実行して確認してみましょう。
【大量にシートを挿入、しかもシート名は4月~9月】
Worksheets.Add.Name = "上期集計"という行を大量にコピーするなんてことは、考えてはいけませんね。
発想としてはいいのですが…
同じことを繰り返しますので、For~Next文を使って、
次のように修正していきましょう。
Sub シートを大量挿入()
Dim i As Long
For i = 4 To 9
Sheets.Add(after:=Sheets(Sheets.Count)).Name = i & "月"
Next i
End Sub
簡単に説明すると、
Dim i As Long
これは、お馴染みの変数宣言ですね。iを用意します。
For i = 4 To 9
なんで4から9なのか?そう、4月~9月にしたいからです。
1月だったら1ですね。
Sheets.Add(after:=Sheets(Sheets.Count)).Name = i & "月"
複雑そうに見えますが、
先ほどの「”挿入”して、”名前を付ける”」のと同じですが、
(after:=Sheets(Sheets.Count))
afterというのは、指定したワークシートの直後に移動することが
出来るということをします。
要するに、最後尾に新しいシートを挿入するってこと。
4月~9月と並べたいですから、このようにします。
では、マスターシートをアクティブにした状態で、実行してみましょう。
比較的簡単なExcel VBAのプログラム文で、出来ちゃうわけですね。
では、afterを使わなかったらどうなるのでしょうか?
Sub シートを大量挿入()
Dim i As Long
For i = 4 To 9
Sheets.Add.Name = i & "月"
Next i
End Sub
マスターシートをアクティブにした状態で、実行してみましょう。
このように、9月から並んでしまっています。
原因は、シートを挿入すると、
アクティブシートの左側に入るようになっているためです。
なので、afterを忘れると、
今度は、シートの移動という処理が発生しちゃいますので、
忘れないようにしましょう。