K-fix Learning & Playing

基礎編


VBAにTRY⑥

では、ワークシートの削除そして、コピーと移動の方法を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
                        
                    
Moveメソッドの書式

Worksheet.Move (Before、After)

Worksheet :移動するワークシートオブジェクトを指定
Before   :特定のシートの直前に挿入するとき指定
After    :特定のシートの直後に挿入するときに指定

Activateメソッドの書式

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メソッドの書式

Array(list1、list2、・・・)

list :配列にしたいリストを列記

FillAcrossSheetsメソッドの書式

worksheets.FillAcrossSheets(Range、Type)

worksheets :コピー先のワークシートオブジェクトを指定
Range    :コピー元のセル範囲を指定
Type     :セル範囲のコピー方法を指定