7/01/2018

Excel。マクロ30。4月~9月までの各シートを挿入するにはどうしたらいいの?【SHEETS】

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を忘れると、
今度は、シートの移動という処理が発生しちゃいますので、
忘れないようにしましょう。