Excel。シートを大量に追加して、指定したシート名に変更するのが面倒なので楽したい。
<Excel VBA>
Excelの処理において、とても単純な作業。
例えば、新しいシートを追加して、そのシート名を変更するなんてことは、簡単な作業ではありますが、処理をする量が増えてしまうと、面倒以外の何物でもありません。
単純作業の繰り返しで、面倒に感じる場合には、Excel VBAでマクロを作ってExcelに処理させちゃうことができれば、作業効率も改善するし、自分自身のワーク負荷も緩和することが出来るかもしれません。
そこで、今回は、大量な新しシートを追加して、しかも追加したシートのシート名も指定して変更までするマクロを作っていきます。
意外と短いプログラム文で、出来ちゃいます。
最初に用意するシートがあります。
追加するシート用のシート名のデータを用意します。
今回は、5件分ですが、100件用意すれば100枚の新しいシートを追加することができて、そのシート名も変更することができます。
もしも五十音順にしておきたい場合には、並び替えを事前にしておくとよいかと思います。
作成するExcel VBAのプログラム文を見ていくことにしましょう。
Sub シート作成()
Dim i As Long
Dim sheet_name As String
Dim lastrow As Long
sheet_name = ""
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To lastrow
sheet_name = Worksheets("シート名作成").Cells(i, "a")
Sheets.Add(after:=Sheets(Sheets.Count)).Name = sheet_name
Next
End Sub
まずは実行して確認してみましょう。
このように、A列のシート名の順番通りにシートが追加されていることが確認できます。
ちょっとしたことですが、知っていると便利かと思われます。
では、プログラム文を確認しておきましょう。
まずは、お馴染みの変数宣言ですね。
Dim i As Long
Dim sheet_name As String
Dim lastrow As Long
変数名「sheet_name」はシート名を代入しておく変数です。
変数名「lastrow」は、繰り返し数のための変数です。
sheet_name = ""
「sheet_name」を初期化しておきます。
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
シート名の件数を確認するためのプログラム文です。
動きとしては、シートの最終行まで一度行き、そこから、上に向かって移動すれば、データの最終行になるという考え方ですね。
For i = 2 To lastrow ~ Next 文で、繰り返し処理をします。
データが2行目からなので、2から始めて、最終行の行番号まで繰り返します。
sheet_name = Worksheets("シート名作成").Cells(i, "a")
変数「sheet_name」に、シート名を代入するプログラム文ですね。
Sheets.Add(after:=Sheets(Sheets.Count)).Name = sheet_name
Sheets.Addで、シートを追加することが出来ます。
after:=Sheets(Sheets.Count) は、Sheets.Countで、シート数を数えます。
例えば2枚のシートがあれば、Sheets(2)となり、「after」なので、Sheets(2)の右側に挿入されます。
afterを設定しないと、左側にシートが挿入されてしまうので、移動するのが面倒なので、afterの設定をしておきました。
Name = sheet_name で、シート名を設定することができます。
比較的、わかりやすいプログラム文ではありますが、大量のシートを挿入しないといけない時などに知っておくといいかもしれませんね。