やりたいこと
ワークシートをコピーする
Excelで下記のようなデータがあるとします。
以下のようにワークシートを追加する方法について紹介します。
コードと解説は以下の通りです。
【VBA コード】
ポイント
Worksheetオブジェクト
セルはCellsプロパティやRangeプロパティを使ってRangeオブジェクトを操作しました。
ワークシートはWorksheetsプロパティやSheetsプロパティを使ってWorksheetオブジェクトを操作します。
ワークシートはオブジェクトなのでWorksheet型の変数はオブジェクト変数と呼ばれます。
オブジェクト変数には、他にもブックやセル範囲などを格納することができます。
Setを使ってオブジェクト変数に値を代入
通常、変数に値を代入する時は「=」を使用しますが、
オブジェクト変数に代入するときは「Set」ステートメントを使用します。
Set テンプレシート = worksheets("テンプレ")
とすることで、変数テンプレシートに"テンプレ"シートの参照を代入するという意味になります。
オブジェクト変数の初期化
オブジェクト変数の参照先をクリアするときはNothingを使います。
変数テンプレシートを初期化するには、
Set テンプレシート = Nothingと記述します。
コレクションとは?
ブックやワークシートなど、同じオブジェクトが複数集まったものをコレクションと呼びます。
ブックには複数のワークシートがあるので、ワークシートコレクションと言います。
Excelは複数のブックを開くことができるのでブックコレクションと言うこともできます。
AfterとBeforeでコピー先を指定
CopyメソッドでAfterかBeforeを使うと、ワークシートのコピー先の位置を指定することができます。
Copy Afterはワークシートを指定したシートの後ろにコピーするメソッドです。
今回は、テンプレシート.Copy After:=Worksheets(Worksheets.Count)とすることで、
シートをコピーしてブックの右端に貼り付けをしています。
:= → これは名前付き引数と言って、引数の名前と引数を結び付ける記号です。
「=」という記号が入っているため、代入と勘違いしてしまいますが、関係はないので注意してください。
今回のケースでは、afterという名前の引数にWorksheets(Worksheets.Count)を指定していることを表しています。
また。「:=」の前後にスペースが入るとエラーになるので注意が必要です。
Formatの使い方
Format(引数, 書式)のように使用します。
Format(シート番号, "000")
とすることで、シート番号の先頭に「0」を付けて3ケタの文字列に変換するという意味になります。
WorkheetとWorksheetsの違い
Worksheetはブックにある1つのワークシートを表します。
Worksheetsはブックにあるすべてのワークシートのコレクションを表します。
変数は1つしか参照しないので、
Dim テンプレシート As Worksheetと書きます。
ブック内の複数のワークシートから特定のワークシートを指定する場合は、
Worksheets("テンプレ")と書きます。
初めは少しややこしいですが、上記のように覚えておきましょう。
Countプロパティの使い方
Countプロパティは、コレクションに含まれるオブジェクトの数を表すプロパティです。
開いているブックの数や、ワークシートの数を調べるときに使用します。
コレクションであるWorksheetsやWorkbooksに使用します。
WorksheetやWorkbookには使用できないので注意が必要です。
おまけ
新規のワークシートを追加する
空白のワークシートを新規で追加するときは、Addメソッドを使用します。
こちらもAfterとBeforeを使用することで、位置を指定することができます。
どちらも指定しない場合は、アクティブシートの直前に追加されます。
ワークシートの位置を移動する
ワークシートの位置を移動するにはMoveメソッドを使用します。
こちらもAfterとBeforeを使用することで、移動先を指定することができます。
どちらも指定していない場合は新規のブックが作成されます。
ひとこと
UiPathの開発ではExcel操作でワークシートをコピーしたり、移動したりさせるとかなり面倒になります。
VBAで書くと数行で実現できるので、やはり覚えておく必要があるなと感じました。
UiPathではマクロを呼び出すアクティビティもあるので、組み合わせることでさらに良いロボットを作ることができそうです!(^^)!
できるシリーズはフルカラーでかなり細かいところまで画像を使って解説してあるのでオススメです!