Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【Excel VBA】ワークシートをコピー、追加、移動する方法

f:id:WillSpecter:20200810141628j:plain

 やりたいこと

ワークシートをコピーする

Excelで下記のようなデータがあるとします。

f:id:WillSpecter:20200814134308p:plain

 

以下のようにワークシートを追加する方法について紹介します。

f:id:WillSpecter:20200814134329p:plain

 

コードと解説は以下の通りです。
VBA コード】

Sub シート追加()
    'Worksheet型の変数を定義
    Dim テンプレシート As Worksheet
    Dim シート番号 As Integer
    Dim シート名 As String
    
    '変数テンプレシートにテンプレを代入
    Set テンプレシート = Worksheets("テンプレ")
    
    '最後のワークシートの番号に1を加算する
    シート番号 = CInt(Worksheets(Worksheets.Count).Name) + 1
    
    '先頭に0をつけた文字列型に変換
    シート名 = Format(シート番号, "000")
    
    'テンプレシートをコピーして右端に貼り付ける
    テンプレシート.Copy After:=Worksheets(Worksheets.Count)
    
    '選択されているワークシートの名前を変更する
    ActiveSheet.Name = シート名
End Sub

ポイント

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プロパティは、コレクションに含まれるオブジェクトの数を表すプロパティです。

開いているブックの数や、ワークシートの数を調べるときに使用します。

 

コレクションであるWorksheetsWorkbooksに使用します。

 

WorksheetやWorkbookには使用できないので注意が必要です。

おまけ

新規のワークシートを追加する

 空白のワークシートを新規で追加するときは、Addメソッドを使用します。

こちらもAfterBeforeを使用することで、位置を指定することができます。

どちらも指定しない場合は、アクティブシートの直前に追加されます。

Sub ワークシート追加()

    '空白のワークシートをブックの左端に追加する
    Worksheets.Add before:=Worksheets(1)
    
    '追加したワークシートがアクティブになるので、名前を変更
    ActiveSheet.Name = "新規追加シート"
End Sub

ワークシートの位置を移動する

ワークシートの位置を移動するにはMoveメソッドを使用します。

こちらもAfterBeforeを使用することで、移動先を指定することができます。

どちらも指定していない場合は新規のブックが作成されます。

Sub ワークシート移動()
    '新規追加シートをブックの左から2番目の位置に移動
    Worksheets("新規追加シート").Move after:=Worksheets(2)
End Sub

ひとこと

 

UiPathの開発ではExcel操作でワークシートをコピーしたり、移動したりさせるとかなり面倒になります。

 

VBAで書くと数行で実現できるので、やはり覚えておく必要があるなと感じました。

 

UiPathではマクロを呼び出すアクティビティもあるので、組み合わせることでさらに良いロボットを作ることができそうです!(^^)!

 

できるシリーズはフルカラーでかなり細かいところまで画像を使って解説してあるのでオススメです!