【Excel VBA】シートを追加するおススメの方法

Excel VBAを利用していると一時的にシートを追加したいときがあります。

シートを追加する方法

シートを追加するにはWorksheetsコレクションのAddメソッドを使用します。

Addメソッドの構文

Worksheets.Add(Before, After, Count, Type)

引数必須説明
Before指定したシートの前に追加します。引数「After」と一緒に指定できません。
After指定したシートの後に追加します。 引数「Before」と一緒に指定できません。
Count追加するシートの数を指定します。 既定値は 1 です。
ただし、複数シートを選択した状態で追加すると色々と問題が起きるので、
指定した方が無難です。
Typeワークシートの種類を指定します。既定値は xlWorksheet です。通常VBAを作成する場合、
ほとんどがワークシート(xlWorksheet)です。ほかに利用するとすれば、グラフシート
(xlchart)でしょうか。ほかのTypeは覚えなくていいでしょう。

戻り値

追加したワークシートオブジェクトを返します。TypexlWorksheetを指定していればWorksheetオブジェクト、xlchartを指定していればChartオブジェクトを返します。

使用例

調べてみると分かりますが、VBAでのシートの追加は多種多様な書き方ができます。どういう書き方がいいんだろうと分からなくなることが多々あります。

よくよく考えてみると、VBAでシートの追加をする場合、一般的に以下に当てはまることが多いです。以下に当てはまるとして、最適と思われる書き方をご紹介します。

  • 追加したシートに対して操作をしたい
  • 追加するシート名を設定したい
  • 追加したシートが不要になったら削除したい
  • 追加したいシートの位置は一番左か、一番右か、指定したシートの右
  • シートの追加操作はVBAを実行しているブック
  • もしかするとVBAを実行中にExcelの操作するかもしれない

上記を前提とした場合、以下が方法がおすすめです。以下の例の実行した結果もそれぞれ例示しています。コード実行前のシートの状態は以下です。

例:一番右にシートを追加する

Sub sample1()

    Dim sheet As Worksheet ' Worksheet変数sheetを宣言

    Set sheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) 'シートを一番右に追加
    sheet.Name = "追加したシート" ' シートの名前を"「追加したシート」に変更

    sheet.Cells(1, 1).Value = 1 ' 追加したシートを操作する。ここではA1に1と入力

    sheet.Delete '不要になったら削除。

End Sub

上記コードをsheet.Delete前まで実行した結果は以下のようになります。

例:指定したシートの右にシートを追加する

Sub sample2()

    Dim sheet As Worksheet ' Worksheet変数sheetを宣言

    Set sheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets("Sheet2")) ' 「Sheet2」シートの後にシートを追加
    sheet.Name = "追加したシート" ' シートの名前を"「追加したシート」に変更
    
    sheet.Cells(1, 1).Value = 1 ' 追加したシートを操作する。ここではA1に1と入力

    sheet.Delete '不要になったら削除

End Sub

上記コードをsheet.Delete前まで実行した結果は以下のようになります。

例:一番左にシートを追加する

Sub sample3()

    Dim sheet As Worksheet ' Worksheet変数sheetを宣言

    Set sheet = ThisWorkbook.Sheets.Add(Before:=ThisWorkbook.Sheets(1)) 'シートを一番左に追加
    sheet.Name = "追加したシート" ' シートの名前を"「追加したシート」に変更
    
    sheet.Cells(1, 1).Value = 1 ' 追加したシートを操作する。ここではA1に1と入力

    sheet.Delete '不要になったら削除

End Sub

上記コードをsheet.Delete前まで実行した結果は以下のようになります。

以上です。

コメント

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