1/06/2022

Excel。VBA。大量のシート名を指定したシートのコピーを手早く行いたい【Copy of sheet】

Excel。VBA。大量のシート名を指定したシートのコピーを手早く行いたい

<Excel VBA>

単純な作業ほど、繰り返して処理をするとなると、面倒に感じます。

そこで、Excel VBAでマクロをつくって実行させる方が作業効率としても改善できるし、面倒な作業から解放されるわけですね。


そこで、今回は、次のようなケースの対応方法をExcel VBAで対応していきます。


シート店舗一覧には、店舗一覧が用意されています。


 

シート原版は、テンプレシートのシートです。


やりたい処理は、シート原版をコピーします。

コピーしたシートは、A1とシート名をシート店舗一覧から設定します。

作成するシート数は、シート店舗一覧の横浜店から強羅店までです。


作業としては、簡単ですが、店舗数分繰り返すとなると、面倒ですね。


そこで、Excel VBAでプログラミングをつくって対応したいというわけです。


Sub シート作成()

    Dim i As Long

    Dim sheet_name As String

    Dim lastrow As Long


    sheet_name = ""

    lastrow = Worksheets("店舗一覧").Cells(Rows.Count, "a").End(xlUp).Row


    For i = 2 To lastrow

        sheet_name = Worksheets("店舗一覧").Cells(i, "a")

        ThisWorkbook.Sheets("原版").Copy after:=Sheets(Sheets.Count)

        ActiveSheet.Name = sheet_name

        Range("a1").Value = sheet_name

    Next

End Sub


実行してみましょう。


店舗一覧の店舗シートを作成することができました。


では、プログラミング文を確認していきましょう。


お馴染み変数宣言ですね。

Dim i As Long 

Dim sheet_name

Dim lastrow As Long


sheet_nameは、店舗名を代入して使用する変数です。


lastrow = Worksheets("店舗一覧").Cells(Rows.Count, "a").End(xlUp).Row

繰り返し処理のために、シート店舗一覧の店舗数を代入しているのが、lastrowです。


For i = 2 To lastrow

    sheet_name = Worksheets("店舗一覧").Cells(i, "a")

    ThisWorkbook.Sheets("原版").Copy after:=Sheets(Sheets.Count)

    ActiveSheet.Name = sheet_name

    Range("a1").Value = sheet_name

Next


For i = 2 To lastrow~Next

For To Next文をつかって、繰り返し処理をします。

2から開始しているのは、見出し行を除いたデータがA2にあるからです。


sheet_name = Worksheets("店舗一覧").Cells(i, "a")

シート店舗一覧のA列の店舗名をsheet nameに代入します。


ThisWorkbook.Sheets("原版").Copy after:=Sheets(Sheets.Count)

シート原版をシートの最後尾にコピーします。

「after:」とすることで、そのシートの右側にコピーすることができます。

「Sheets.Count」はシート数を算出します。


例えば、シート数が3枚の場合だと、

「after:=Sheets(Sheets.Count)」は、Sheet(3)の右側にシートをコピーするという意味になります。


ActiveSheet.Name = sheet_name

コピーしたシート名を、代入した名前に置き換えます。


Range("a1").Value = sheet_name

A1に店舗名を設定します。


このように、比較的シンプルなプログラム文で、作業効率を改善することができます。

日頃行っている作業で、面倒なものなどがあれば、Excel VBAをつかって、マクロをつくってみるというのもいいかもしれませんね。