前回の記事では条件分岐に関して説明しました。

【ExcelVBA】FORの使い方(繰り返し処理に関して)

 

今回はシートの操作に関して説明させて頂きます!

 

シートのコピーに関してシートを追加したい場合は、下記の処理を書くと追加することが出来ます。

 

〈コピー〉

Worksheets("sheet1").Copy After:=Worksheets(Worksheets.Count)

 

これは僕がよく使う書き方なのですが、末尾にsheet1という名前のシートをコピーする、という意味になります。

Worksheets.Count:現在あるシートの総数を取得

 

なので、結果として常に最後にコピーする、という意味になります!

 

Copyメソッドでは、BeforeとAfterを指定することが出来て、それぞれ意味が違います。

Before:= 指定したシートの直前にコピーしたシートを追加する

After:= 指定したシートの直後にコピーしたシートを追加する

 

注意して頂きたいのが、BeforeもAfterも「:=」でコピー先を指定します。

「:」が抜けると動かないので注意して下さい。

 

(例)シートを10枚分複製したい場合

Public Sub シートコピー()
Dim lp As Long
    For lp = 1 To 10
        Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)
    Next
End Sub

 

(例)シート名を変更してコピー(今回の例ではあらかじめ、A1~J1セルに名称を書いておく必要があります。)

Public Sub シートコピー_名称変更()
Dim lp As Long
    For lp = 1 To 10
        Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Worksheets("Sheet1").Cells(1, lp)
    Next
End Sub

 

 

 

シートの削除シートを削除したい場合は、下記の処理で削除することが出来ます。

Public Sub シート削除()
    Dim mySht As Worksheet
    Dim wsImport As Worksheet
    Application.DisplayAlerts = False
    For Each mySht In Worksheets
        If mySht.Name <> "消したくないシート名称" Then
            mySht.Delete
        End If
    Next
    Application.DisplayAlerts = True
End Sub

え、急に長くない?と思う人も多いかと思います。
これも僕がよく使う書き方になります。

この処理を使うと、消したくないシート名称の箇所にシート名を指定することで、それ以外のシートを全て削除してくれます。

シートをコピーする場合はそのまま書いてもいいのですが、削除に関してはエクセルが安全サイドに働いて、
「本当に削除してもいいですか?」と聞いてきます。

せっかく自動で削除してくれるようなマクロを作っても、毎回聞かれたら困りますよね(笑)

Application.DisplayAlerts = Falseと書くことで、エクセルがアラームを出さなくなります。

それで、一通り削除し終わった後に、Application.DisplayAlerts = Trueにて再びアラームを出すという処理になります。

 

For Each mySht In Worksheetsとすることで、全ワークシート分処理を繰り返してくれます。

 

今回は以上になります!

ただのコピー、削除の使い方はネットでたくさん出回っているので、僕が普段使っている書き方を紹介させて頂きました!

 

シートのコピー、削除も少し工夫をしてあげると便利です!

次回はファイルを開いたりする処理に関して説明させて頂こうと考えています。

 

今回も最後まで読んで頂きありがとうございました。

何かあれば、気軽にコメントしてください!