ワークシートの追加

カテゴリー名: [ExcelVBAとOLE ワークシートの操作

2016/09/03

ワークシートを追加する方法を取り上げます。


《このページの目次》


    

1. 概要

 ワークシートの追加は Worksheets.Add で行います。

 これを実行すると、アクティブシートの前に新しいワークシートが挿入されます。

 そして、その新しいワークシートがアクティブシートになります。

 新規のワークブックでは、Sheet1, Sheet2, Sheet3 の三つのワークシートがあり、Sheet1 がアクティブシートになっています。

 その状態で Worksheets.Add を実行すると、Sheet1 の前に新しいワークシートが作られます。結果、Sheet1 は第2ワークシートになります。

 新しいワークシート(第1ワークシート)の名前は Sheet4 です。自動的にそのワークシート名が割り当てられます。

    

◇ Worksheets.Addのオプション

 Worksheets.Add では四つのオプションを指定することができます。Before, After, Count, Type です。

 Worksheets.Add Before:=Worksheets("Sheet3") とすれば、Sheet3 の前に新しいワークシートが挿入されます。

 Worksheets.Add After:=Worksheets("Sheet3") とすれば、Sheet3 の後に新しいワークシートが追加されます。

 Worksheets.Add Count:=3 とすれば、アクティブシートの前に新しいワークシートが3枚挿入されます。3枚のワークシートの3番目のシートがアクティブシートになります。

 また、Worksheets.Add After:=Worksheets("Sheet3"), Count:=3 とすれば、Sheet3 の後に新しいワークシートが3枚追加されます。つまり Sheet4, Sheet5, Sheet6 が追加されます。そして、Sheet6 がアクティブシートになります。

 オプションのTypeは、ワークシートのタイプを指定するためのものです。通常のワークシートを挿入するのなら省略です。チャートのシートとかダイアログシートを挿入したい時に指定します。

    

◇ 最後尾にワークシートを追加するには

 ワークシートが何枚あるかは Worksheets.Count で知ることができます。

 なので、最後のワークシートオブジェクトは Worksheets(Worksheets.Count) です。

 この最後のワークシートオブジェクトの後ろにワークシートを追加するには次のようにします。

Worksheets.Add After:=Worksheets(Worksheets.Count)

 もっと簡潔に書ければいいのですが……

目次に戻る


    

2. VBAマクロ

 次の処理を行うVBAマクロを掲げます。

 結果、Sheet4, Sheet1, Sheet2, Sheet3, Sheet5 の順番でワークシートが並びます。

    

△ macro10.txt

1' ワークシートの追加
2Sub Macro1()
3    Worksheets(1).Activate  ' 第1シートに焦点を
4    Worksheets.Add  ' ActiveSheetの前にシートを追加
5    Range("A1").Value = ActiveSheet.Name  ' 新たなActiveSheetの名前
6    Worksheets.Add After:=Worksheets(Worksheets.Count)  ' 最後尾にシート追加
7    Range("A1").Value = ActiveSheet.Name  ' 新たなActiveSheetの名前
8End Sub

 上のマクロでは、新たに追加したワークシートのA1セルに、そのワークシートの名前を書き込んでいます。

 Worksheets.Add を実行すると、追加された新しいワークシートが ActiveSheet になります。

目次に戻る


    

3. OLEを利用するVBScript

 先のマクロと同じ庶路を行う VBScript を掲げます。

△ vovXL10.vbs

 1' ワークシートの追加
 2Option Explicit
 3Dim FSO, BookPath
 4Dim EXLapp, WBobj
 5Const xlWorkbookNormal = -4143
 6
 7Set FSO = CreateObject("Scripting.FileSystemObject")
 8BookPath = FSO.GetAbsolutePathName("Book1.xls")
 9If (FSO.FileExists(BookPath) = True) Then FSO.DeleteFile(BookPath)
10Set EXLapp = CreateObject("Excel.Application")  ' Excelの起動
11EXLapp.Visible = True  ' Excelを見える状態に
12Set WBobj = EXLapp.Workbooks.Add()  ' Workbookの新規作成
13With WBobj
14    .Worksheets(1).Activate  ' 第1シートに焦点を
15    .Worksheets.Add  ' ActiveSheetの前にシートを追加
16    .ActiveSheet.Range("A1").Value = .ActiveSheet.Name  ' 新しいSheetの名前
17    .Worksheets.Add , .Worksheets(.Worksheets.Count)  ' 最後尾にシート追加
18    .ActiveSheet.Range("A1").Value = .ActiveSheet.Name  ' 新しいSheetの名前
19End With
20WBobj.SaveAs BookPath, xlWorkbookNormal
21EXLapp.quit

    

 中核部分は先のVBAマクロとほぼ同じですが、

 マクロの Worksheets.Add After:=Worksheets(Worksheets.Count) の箇所を

 .Worksheets.Add , .Worksheets(.Worksheets.Count) としています。カンマ記号が宙ぶらりんな感じです。

 VBScriptでは、Addメソッドのパラメータを指定するとき、Before, After, Count, Type というパラメータの名前を使うことができないので、順番通りに列べます。

 After は2番目なので、Beforeを省略したという意味でカンマを一つ書いてから .Worksheets(.Worksheets.Count) を書きます。

 JScriptであれば Before のところを null にして、Worksheets.Add(null, Worksheets(Worksheets.Count) とします。

目次に戻る


    

4. OLEを利用するJScript

 前述の VBScript と同じ処理を行う JScript は、下のとおりです。

△ vovXL10.js

 1// ワークシートの追加
 2var fso, bookPath;
 3var ExlApp, wb;
 4var xlWorkbookNormal = -4143;
 5
 6fso = WScript.CreateObject("Scripting.FileSystemObject");
 7bookPath = fso.GetAbsolutePathName("Book1.xls");
 8if (fso.FileExists(bookPath))  fso.DeleteFile(bookPath);
 9ExlApp = WScript.CreateObject("Excel.Application");  // Excelの起動
10ExlApp.Visible = true;  // Excelを見える状態に
11wb = ExlApp.Workbooks.Add();  // Workbookの新規作成
12with (wb) {
13    Worksheets(1).Activate;  // 第1シートに焦点を
14    Worksheets.Add();  // ActiveSheetの前にシートを追加
15    ActiveSheet.Range("A1").Value = ActiveSheet.Name;  // 新しいSheetの名前
16    Worksheets.Add(null, Worksheets(Worksheets.Count));  // 最後尾にシート追加
17    ActiveSheet.Range("A1").Value = ActiveSheet.Name;  // 新しいSheetの名前
18}
19wb.SaveAs(bookPath, xlWorkbookNormal);
20ExlApp.Quit();

〜 以上 〜