カテゴリー名: [ExcelVBAとOLE ワークシートの操作]
ワークシートを追加する方法を取り上げます。
ワークシートの追加は Worksheets.Add
で行います。
これを実行すると、アクティブシートの前に新しいワークシートが挿入されます。
そして、その新しいワークシートがアクティブシートになります。
新規のワークブックでは、Sheet1, Sheet2, Sheet3 の三つのワークシートがあり、Sheet1 がアクティブシートになっています。
その状態で Worksheets.Add
を実行すると、Sheet1 の前に新しいワークシートが作られます。結果、Sheet1 は第2ワークシートになります。
新しいワークシート(第1ワークシート)の名前は Sheet4 です。自動的にそのワークシート名が割り当てられます。
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)
もっと簡潔に書ければいいのですが……
次の処理を行うVBAマクロを掲げます。
結果、Sheet4, Sheet1, Sheet2, Sheet3, Sheet5 の順番でワークシートが並びます。
上のマクロでは、新たに追加したワークシートのA1セルに、そのワークシートの名前を書き込んでいます。
Worksheets.Add
を実行すると、追加された新しいワークシートが ActiveSheet になります。
先のマクロと同じ庶路を行う VBScript を掲げます。
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)
とします。
前述の VBScript と同じ処理を行う JScript は、下のとおりです。
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();
〜 以上 〜