では、ワークシートの削除そして、コピーと移動の方法をVBAで作っていきましょう。また、セル範囲をまとめて複数のシートにコピーする操作もやります。
まず、削除のコードを記述してみます。
Sub 削除()
Dim WS As Worksheet
Set WS = Worksheets.Add(After:=Worksheets("Sheet2"))
WS.Name = "追加"
MsgBox "追加したシートを削除します。"
WS.Delete
End Sub
このVBAでは、「追加」という名前のワークシートを追加して、すぐに削除する処理となっています。
コードの内容は、まずワークシートのSheet2の後に新規シートを追加したシートを変数WSにセットします。そのシートの名前を「追加」にし、すぐに「追加したシートを削除します」とメッセージを表示します。そのメッセージウィンドウでOKボタンをクリックすると、追加されたシートが削除され、処理が終わります。
実際の活用としては意味がありませんが、削除の場合は、必ずメッセージボックスで削除することを促してから行うほうが、ユーザにとっては親切な設計となることは覚えておきましょう。
次にシートのコピーと移動を行います。以下のとおりにVBAコードを記述してください。
Sub コピーと移動()
Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")
ActiveSheet.Name = "模写"
MsgBox "シートを移動します。"
Worksheets("模写").Move Before:=Worksheets("Sheet1")
End Sub
Worksheet.Move (Before、After)
Worksheet
:移動するワークシートオブジェクトを指定
Before :特定のシートの直前に挿入するとき指定
After :特定のシートの直後に挿入するときに指定
object.Activate
object :指定されたオブジェクトをアクティブにします。
では、最後にあるシートの指定したセル範囲を、他の複数のシートのまったく同じ場所にコピーするコードを記述していきます。配列関数を使います。
Sub 連続コピー()
Dim No As Variant
Dim i As Integer
Dim WS As Worksheet
For i = 1 To 3
Set WS = Worksheets.Add
WS.Name = "追加" & i
Next i
No = Array("Sheet1", "追加1", "追加2", "追加3")
Worksheets(No).FillAcrossSheets _
Range:=Worksheets("Sheet1").Range("A1:G8")
End Sub
このVBAコードの説明をします。まず、変数Noをバリアント型、変数iは整数型、変数WSはワークシートオブジェクトで宣言します。
次にForステートメントを利用して、新規シートを3枚作成します。その際に、Worksheetの名前を「追加1」、「追加2」、「追加3」と変更します。この場合、追加する場所が指定されていません。このような時は、選択されているシートの前に追加となります。ただ、この場合はコピー元をsheet1としますので、あらかじめsheet1が選択されているのを確認してから、実行する必要があります。
通常、オブジェクト名を取得するWorkSheetsプロパティは、単一のワークシート名しか指定できません。複数のシート名をオブジェクトとして指定する場合は、Array関数を使用してシート名を配列にします。
配列とは、複数のデータを1つにまとめたデータのことで、ここでは4枚のシート名を「No」という変数に、ひとまとめにして格納します(だから、データ型はValiant型となる)。こうすることで、1つの変数で複数のシート名を一括して操作できます。
No =
Array("sheet1"、"追加1"、"追加2"、"追加3")と記述しているのは、必ずコピー元を最初の項目として、その後のコピー先のワークシートを順番に記述するからです。つまり、ここではコピー元のデータはsheet1であり、そのコピーしたものを追加1から追加3のシートに貼り付けていくことになります。
次に、対象のシート名がまとめられたら、WorksheetsプロパティでFillAcrossSheetsメソッドの対象オブジェクトに指定します。引数であるRangeにコピー元のシート名とセル範囲を指定することで、その範囲がコピーされて、コピー先となるワークシート上で同じセル番地に内容が貼り付けられます。
Array(list1、list2、・・・)
list :配列にしたいリストを列記
worksheets.FillAcrossSheets(Range、Type)
worksheets :コピー先のワークシートオブジェクトを指定
Range :コピー元のセル範囲を指定
Type
:セル範囲のコピー方法を指定