カテゴリー名: [ExcelVBAとOLE ワークシートの操作]
Sheet2をSheet3の後ろに移動させたりする方法を取り上げます。
ワークシートの移動(順序の入れ替え)は、Moveメソッドで行います。
ターゲットのワークシートをどこに移動させるかは、Moveメソッドの Before または After パラメータで指示します。
アクティブシートを Sheet3 の前に移動したい時は下のとおり。
ActiveSheet.Move Before:=Worksheets("Sheet3")
アクティブシートがSheet1の場合、上を実行すると Sheet2, Sheet1, Sheet3 の順番になります。マクロ実行後のアクティブシートは、2番目のSheet1です。
Sheet2をSheet3の後ろに移動したい時は次のようにします。
Worksheets("Sheet2").Move After:=Worksheets("Sheet3")
上を実行すると、結果、アクティブシートは Sheet2 になります。
Moveメソッドの戻り値は True, False のどちらかです。移動に成功した時は True を返します。
Moveは、Addメソッドのようにワークシートオブジェクトを返す訳ではありません。
Moveメソッで Before, After のどちらのパラメータも指定しない場合は、ターゲットのワークシートが別のワークブックに移動します。別のワークブックというのは、新しく設けられるワークブックです。
Worksheets("Sheet2").Move
とすれば、Sheet2が消えてしまいます。
といっても、完全に失われてしまう訳ではなく、新規のワークブックが設けられて、そちらに Sheet2 が移動します。
その新しいワークブックにはワークシートが1枚しかありません。
また、新しいワークブックには名前がないので、保存するなら何か名前を指定する必要があります。
パラメータなしで Move を使うことはあまりないと思いますが、念のため記しました。
次の処理を行うVBAマクロを掲げます。
先のマクロと同じ庶路を行う VBScript を掲げます。
Moveメソッドのパラメータの名前 Before, After を使えないので、パラメータを規定の順番で列べます。Beforeが第1、Afterが第2です。
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 .ActiveSheet.Move .Worksheets("Sheet3") 15 .ActiveSheet.Range("A1").Value = .ActiveSheet.Name 16 .Worksheets("Sheet2").Move , .Worksheets("Sheet3") 17 .ActiveSheet.Range("A1").Value = .ActiveSheet.Name 18End With 19WBobj.SaveAs BookPath, xlWorkbookNormal 20EXLapp.quit
前述の 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 ActiveSheet.Move(Worksheets("Sheet3")); 14 ActiveSheet.Range("A1").Value = ActiveSheet.Name; 15 Worksheets("Sheet2").Move(null, Worksheets("Sheet3")); 16 ActiveSheet.Range("A1").Value = ActiveSheet.Name; 17} 18wb.SaveAs(bookPath, xlWorkbookNormal); 19ExlApp.Quit();
〜 以上 〜