ワークシートの移動

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

2016/09/03

Sheet2をSheet3の後ろに移動させたりする方法を取り上げます。


《このページの目次》


    

1. 概要

 ワークシートの移動(順序の入れ替え)は、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 を使うことはあまりないと思いますが、念のため記しました。

目次に戻る


    

2. VBAマクロ

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

    

△ macro12.txt

1' ワークシートの移動
2Sub Macro1()
3    ActiveSheet.Move Before:=Worksheets("Sheet3")
4    Range("A1").Value = ActiveSheet.Name
5    Worksheets("Sheet2").Move After:=Worksheets("Sheet3")
6    Range("A1").Value = ActiveSheet.Name
7End Sub

目次に戻る


    

3. OLEを利用するVBScript

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

 Moveメソッドのパラメータの名前 Before, After を使えないので、パラメータを規定の順番で列べます。Beforeが第1、Afterが第2です。

△ vovXL12.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    .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

目次に戻る


    

4. OLEを利用するJScript

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

△ vovXL12.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    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();

〜 以上 〜