トップ > スキル : アプリケーション > VBA for Excel > 基礎編(VBAにTRY⑥)

VBA_EXCEL

VBAにTRY

では、ワークシートの削除そして、コピーと移動の方法をVBAで作っていきましょう。また、セル範囲をまとめて複数のシートにコピーする操作もやります。
まず、削除のコードを記述してみます。

このVBAでは、「追加」という名前のワークシートを追加して、すぐに削除する処理となっています。
コードの内容は、まずワークシートのSheet2の後に新規シートを追加したシートを変数WSにセットします。そのシートの名前を「追加」にし、すぐに「追加したシートを削除します」とメッセージを表示します。そのメッセージウィンドウでOKボタンをクリックすると、追加されたシートが削除され、処理が終わります。

実際の活用としては意味がありませんが、削除の場合は、必ずメッセージボックスで削除することを促してから行うほうが、ユーザにとっては親切な設計となることは覚えておきましょう。

次にシートのコピーと移動を行います。以下のとおりにVBAコードを記述してください。

Moveメソッドの書式

Worksheet.Move (Before、After)

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

Activateメソッドの書式

object.Activate

object :指定されたオブジェクトをアクティブにします。

では、最後にあるシートの指定したセル範囲を、他の複数のシートのまったく同じ場所にコピーするコードを記述していきます。配列関数を使います。

このVBAコードの説明をします。まず、変数Noをバリアント型で宣言します。
次に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     :セル範囲のコピー方法を指定