ワークシートのコピー

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

2016/09/03

Sheet2のコピーをSheet3の後ろに設けるといった方法を取り上げます。


《このページの目次》


    

1. 概要

 ワークシートのコピーは、Copyメソッドで行います。

 ターゲットのワークシートをどの位置にコピーするかは、Copyメソッドの Before または After パラメータで指示します。

 アクティブシートを Sheet3 の前にコピーしたい時は下のとおり。

  ActiveSheet.Copy Before:=Worksheets("Sheet3")

 Sheet2をSheet3の後ろにコピーしたい時は次のようにします。

  Worksheets("Sheet2").Copy After:=Worksheets("Sheet3")

 上を実行すると、新しいワークシート(Sheet2と同じ内容)がアクティブシートになります。

 その新しいワークシートの名前は、おそらく Sheet2 (2) です。

 「おそらく」というのは、Sheet2 (2) という名前のワークシートが既に存在するなら Sheet2 (3) などになるからです。

    

 Copyメソッドの戻り値は True, False のどちらかです。

 コピーに成功した時は True を返します。

    

 Copyメソッで Before, After のどちらのパラメータも指定しない場合は、ターゲットのワークシートが別のワークブックにコピーされます。

 別のワークブックというのは、新しく設けられるワークブックです。

 Worksheets("Sheet2").Copy とすれば、Sheet2と同じ内容のワークシートが別の新設ワークブックにコピーされます。

 その新しいワークブックにはワークシートが1枚しかありません。

 そのワークシート名は Sheet2 です。Sheet2 (2) などではありません。

 パラメータなしで Copy を使うことはあまりないと思いますが、念のため。

目次に戻る


    

2. VBAマクロ

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

    

△ macro13.txt

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

目次に戻る


    

3. OLEを利用するVBScript

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

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

△ vovXL13.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.Copy .Worksheets("Sheet3")
15    .ActiveSheet.Range("A1").Value = .ActiveSheet.Name
16    .Worksheets("Sheet2").Copy , .Worksheets("Sheet3")
17    .ActiveSheet.Range("A1").Value = .ActiveSheet.Name
18End With
19WBobj.SaveAs BookPath, xlWorkbookNormal
20EXLapp.quit

目次に戻る


    

4. OLEを利用するJScript

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

△ vovXL13.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.Copy(Worksheets("Sheet3"));
14    ActiveSheet.Range("A1").Value = ActiveSheet.Name;
15    Worksheets("Sheet2").Copy(null, Worksheets("Sheet3"));
16    ActiveSheet.Range("A1").Value = ActiveSheet.Name;
17}
18wb.SaveAs(bookPath, xlWorkbookNormal);
19ExlApp.Quit();

〜 以上 〜