【VBA】ワークシートの操作(追加・移動・コピーなど)

Excel・VBA

今回は、VBAによるワークシートの操作に関する内容です。

【今回の内容】
1.ワークシートの指定
2.ワークシートの追加
3.ワークシートの削除
4.ワークシートの名前を取得する
5.ワークシートを移動する
6.ワークシートをコピーする

ワークシートの指定

任意のワークシートを指定する方法は2通りあります。

《ワークシートの指定方法》
 番号による指定  :Worksheets(シート番号).select
 シート名による指定:Worksheets(シート名).select

エクセルでは、並んでいるワークシートタブの左から順に1、2、3、・・・とワークシートの番号が割り当てられており、この番号を指定することで特定のワークシートを指定することができます。

一方、シート名による指定ではワークシートの名前を直接指定します。このとき、シート名を必ず””(ダブルクオテーション)で囲う必要があるので注意してください。VBAでは””で囲うことで文字列として認識されます。なお、番号で指定する場合は必要ありません。

また、現在選択しているワークシートに関しては、次のように指定することも可能です。

《現在選択中のワークシートの指定方法》
 ActiveSheet

ワークシートの追加

ワークシートを新規に追加する方法は、次のように書きます。

《ワークシートの追加方法》
 一度に複数追加する:WorkSheets.Add Count := 枚数, Before(After) := _
シート名 or 番号, Type:=種類
 シート名を指定して追加する:WorkSheets.Add.Name = シート名

Countは追加するシートの枚数を指定します。 一度に複数のシート追加する場合に使用します。

Before(After)は追加したい場所のシート名(番号)を指定します。指定したシート(番号)の左側、Afterでは右側に新しいシートが追加されます。シート名や番号は、[ WorkSheets( シート名 or 番号 ) ]と書くことで指定できます。シート名で指定する際は、””を忘れずに。

Typeは、追加するワークシートの種類を指定します。ワークシート以外にグラフシートなどを指定できます。なお、Typeは使う機会がほぼないと思いますので割愛します。また、グラフシートの追加方法については別途説明します。

いずれの項目も省略が可能です。Countを省略した場合、追加されるシートは1枚となります。またBefore(After)については、省略すると一番左側にワークシートが追加されます。Typeを省略すると通常のワークシートが追加されます。

サンプルコード(ワークシートを追加する)

Sub sheet_sample()
  Worksheets.Add Count:=2, after:=Worksheets(2)
  Worksheets.Add after:=Worksheets("Sheet3")
  Worksheets.Add.Name = "Sample"
 End Sub

サンプルコードでは、まず1行目で左から2番目のワークシートの右側にワークシートを2枚追加しています(Sheet4,5)。つづいて2行目でワークシート”Sheet3″の右に1枚追加しています。この時、2行目で追加されたシート(Sheet6)がアクティブになっているので、3行目ではこのシートの左側にワークシート”Sample”が追加されます。

ワークシートの削除

ワークシートを削除する方法は2種類あり、次のように書きます。

《ワークシートの削除》
 番号による指定  :Worksheets(シート番号).Delete
 シート名による指定:Worksheets(シート名). Delete

どちらのケースでも、削除しようとすると注意メッセージが表示されます。

このメッセージが表示されると処理が途中で停止するので、メッセージの表記をさせないように指定します。

《ワークシート削除時》 注意メッセージを表示(させる)させない

これは、最初と最後に次の文を記載することで設定と解除を行います。

《 注意メッセージを表示(させる)させない》
 Application.DisplayAlerts = (True) False
 ・True:表示させる
 ・False:表示させない

コードの開始時に Application.DisplayAlerts = Falseを指定し、コードの末尾にApplication.DisplayAlerts = Trueと記載しておけば、処理中にメッセージの表示がされなくなります。

サンプルコード( 注意メッセージを表示させない )

  Sub Sheetdelete_sample()
    Application.DisplayAlerts = False
    Worksheets(3).Delete
    Worksheets("Sheet4").Delete
    Application.DisplayAlerts = True
   End Sub 

サンプルコードでは左から3番目(Sheet5)を削除し、つぎにワークシート”Sheet4″を削除します。

ワークシートの名前を取得する

ワークシートの名前を取得する方法です。

《ワークシートの名前を取得する》
 番号による指定  :変数 = Worksheets(シート番号).Name
 現在選択しているシートの名前を取得:変数 = ActiveSheet.Name
 ※変数は文字列型 or Variant型で宣言

サンプルコード(ワークシートの名前を取得する)

  Sub sheetname_sample()
   Dim wsname As String

   wsname = Worksheets(2).Name
   MsgBox (wsname)
  End Sub 

この例では、左から2番目のワークシートの名前を取得し、取得した名前を表示させています。

   Sub sheetname_sample()
   Dim wsname As String

   wsname = ActiveSheet.Name
   MsgBox (wsname)
  End Sub  

今度は現在選択されているシートの名前を取得し、表示させています。

ワークシートを移動する

ワークシートを移動する方法は、次のように書きます。

《ワークシートを移動する》
 番号による指定  :Worksheets(シート番号).Move Before(After) := _
Worksheets(移動先のシート名(or シート番号))
 シート名による指定:Worksheets(シート名). Move Before(After) := _
Worksheets(移動先の シート名(or シート番号))
 現在選択しているシートを移動:ActiveSheet.Move Before(After) := _
Worksheets(移動先の シート名(or シート番号))

シートの移動先は省略可能ですが、その場合は新しいブックへ移動しますので注意してください。

サンプルコード(ワークシートを移動する)

 Sub sheetmove_sample()
  Worksheets(2).Move after:=Worksheets(3)
  Worksheets("Sheet1").Move before:=Worksheets("Sheet3")
 End Sub

この例では、左から2番目のワークシートを左から3番目のワークシートの右側に移動したのち、”Sheet1″を”Sheet3″の左側に移動しています。

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

ワークシートをコピーする方法です。

《ワークシートをコピーする》
 番号による指定  :Worksheets(番号).Copy Before(After) := _
Worksheets(コピー先のシート名(or シート番号))
 シート名による指定:Worksheets(シート名).Copy Before(After) := _
Worksheets(コピー先のシート名(or シート番号))
 現在選択しているシートをコピー:ActiveSheet.Copy Before(After) := _
Worksheets(コピー先のシート名(or シート番号))

ワークシートのコピーは移動と同じ書き方で指定します。先ほどのサンプルコードのMoveをCopyに変更すれば、ワークシートのコピーを行うことができます。

コメント

タイトルとURLをコピーしました