9/11/2018

Excel。マクロ34。連番でないシートを増やす方法【Increase sheets】

Excel。マクロ34。連番でないシートを増やす方法

<Excel VBA:シート増殖>

次のような4月~9月のような連番になっているシートを
一枚一枚挿入していくのは、非常に面倒です。

このように、面倒な作業はマクロを作って実行すると楽なので、
Excel VBAで作ると、次のようになります。

Sub シートを大量挿入()
    Dim i As Long
    For i = 4 To 9
      Sheets.Add(after:=Sheets(Sheets.Count)).Name = i & "月"
    Next i
End Sub

For i = 4 To 9~Next i 
を使って繰り返すことで、
シートを連番で挿入するという処理をさせています。

今回は、4月~9月ような連番でシートを挿入するのではなく、
次のような場合どのようにしたらいいのでしょうか?

まず、シート名用の表を用意します。

今回は、マスターというシートに次のような表を用意しておきます。

Excel VBAでマクロを作ってみましょう。

Sub シートを大量挿入連番でない()
    Dim i As Long
    Dim tenpo As String
    tenpo = ""
   
    For i = 1 To 5
      tenpo = Worksheets("マスター").Cells(i, 1)
      Sheets.Add(after:=Sheets(Sheets.Count)).Name = tenpo
    Next i
End Sub

では、説明していきます。
For~Nextは、繰り返しなので、説明は割愛します。

tenpo = Worksheets("マスター").Cells(i, 1)
マスターシートのCells(i, 1)。
つまり、A1の値をtenpoという変数に入れるわけですね。

今回は、”新宿”という文字が入ります。

その”新宿”という文字を、
Sheets.Add(after:=Sheets(Sheets.Count)).Name = tenpo

Sheets.Addは、シートを追加するという意味ですね。

(after:=Sheets(Sheets.Count))ですが、afterをつけないと、
アクティブにしているシートの左側に新しいシートが挿入されてしまうので、
afterを使って右側に挿入するようにします。

そして、アクティブになっているのが一番右側にしたいので、
Sheets.Countを使うことで、シートの総枚数を求めることができるので、
Sheets(総シート数)になり、
その右側に新しいシートを挿入することができます。

Nameなので、その新しく挿入されたシートの名前は、tenpo。
つまり、”新宿”という名前が設定することができるという意味になります。

それを、For~Nextを使って、件数分繰り返すことで、
連番でないシート名のシートを挿入することができるのです。

では、実行してみましょう。

このように、簡単なExcel VBAのプログラム文で、
連番でないオリジナルの順番で新しいシートを挿入することができました。

この表の1件ずつを使って、シート名にするわけですから、
仮に、40人分のシート名のシートを挿入するのであれば、
40件入力しておけばいいわけですね。

手で1枚ずつ新しいシートを挿入する手間暇を考えると、
はるかに効率がいいと思います。

現場では、連番でシートを作ることよりも、
何の連続性もないシートを挿入することのほうが多いわけなので、
連番ではないシートを増やす方法も知っているといいですよね。