VBAトレーニング-04

VBAトレーニング-04 [ブック&シート操作について-④]-[新規ブックとシートの作成方法]

このページで学習出来る事

 VBAトレーニング4回目となる今回は、前回に引き続きExcelブックとシートの使い方について説明をしていきたいと思います。

 ただ単純にシートを切り替えたり、削除したりするコードを覚えるのではなくブックやシートオブジェクトを見ながら、実際にエクセルファイルを作成したりその中にあるシートを操ってみたいと思います。

学習内容

  • 新規エクセルファイルの作成方法と保存

  • 新規シートの作成方法と名前の変更

この学習で使用するエクセルファイルはここからダウンロードできます。

  


準備

 今回は[C:\temp]以下に自動でエクセルファイルを作成しますので、あらかじめ[C:\temp]フォルダを準備しておきます。(サンプル用のzipファイルを用意してありますので、それを解凍してCドライブにコピペしてください)
 下記図のようになるよう設置してください。

  


サンプルコード

 zipファイルに含まれる[sample-04.xlsm]を開いて、中に書かれているコードを確認しましょう。このコードには新規エクセルファイルとシートを作成する内容が書かれています。
 このファイルをそのまま使用しても構いませんし、新しくエクセルファイルを作って、自身でコードを記載して動かしても構いません。(直接コードを書いた方が覚えやすいので、時間がある方は書く練習もしてみましょう)

Sub main()
    Dim objXlsApp As New Application
    Dim arrayText As New Collection
    Dim objWorkbook As Workbook
    Dim objWorksheet  As Worksheet
    Dim i As Integer

    '[Sheet1]のセル値を配列に設定しています。
    Set objWorkbook = Application.ActiveWorkbook
    Set objWorksheet = objWorkbook.Worksheets(1)
    For i = 1 To 3
        arrayText.Add (objWorksheet.Cells(i, 1))
    Next i
    Debug.Print "wait"

    '配列のループさせながらエクセルファイルをシートを作成しています。
    For Each strText In arrayText
        Set objWorkbook = objXlsApp.Workbooks.Add
        
        For i = 1 To 5
            Set objWorksheet = objWorkbook.Worksheets.Add
            objWorksheet.Name = "作ったシート--" & i
        Next i

        objWorkbook.SaveAs ("C:\temp\" & strText & ".xlsx")
        objWorkbook.Close
        
        Debug.Print "wait"
    Next strText

End Sub

コードの解説 変数設定

‘エクセルアプリケーションを使用する宣言をしています。
Dim objXlsApp As New Application

‘セルの値を書き込む配列を設定しています。
Dim arrayText As New Collection

‘ブックオブジェクトを設定しています。このオブジェクトを使って新規エクセルを作成していきます。
Dim objWorkbook As Workbook

‘シートオブジェクトを設定しています。
Dim objWorksheet As Worksheet

  

コードの解説 セル値の取得と配列への代入

‘[Sheet1]のセル値1行~3行目(新規に作成されるエクセルファイルの名前が記載されています)を配列に格納しています。
‘[arrayText.Add]の記述で配列に値を入れています。
For i = 1 To 3
 arrayText.Add (objWorksheet.Cells(i, 1))
Next i

  

コードの解説 新規ブックとシートの作成。エクセルファイルの保存

‘配列最後までループを実施する処理です。
For Each strText In arrayText

‘エクセルアプリケーションから新規ブックを追加しています。
Set objWorkbook = objXlsApp.Workbooks.Add

‘作成した新規ブックに対して新しいシートを5個追加しています。
‘そして追加したシートの名前を変更しています。
For i = 1 To 5
 Set objWorksheet = objWorkbook.Worksheets.Add
 objWorksheet.Name = “作ったシート–” & i
Next i

‘配列の値をファイル名として[C:\temp\]に保存処理をしています。
objWorkbook.SaveAs (“C:\temp\” & strText & “.xlsx”)
objWorkbook.Close

  


各オブジェクトと変数の確認

 [Debug.Print]の所でブレークポイントを設定し実行してみましょう。
 ブレークポイントで止まったところで、設定した変数に「開いているブックオブジェクト」、「[Sheet1]のシートオブジェクト」、「セルの値を入れた[arrayText]の配列」がそれぞれ確認できると思います。
 これから、このセル値を使用して新規のエクセルファイルを作成することになります。

 ローカルウィンドウの[+]を押して、オブジェクトや配列の中身を確認していきましょう。

 今回の配列処理は[コレクション配列]というやり方を使っています。
この[コレクション配列]では、配列のサイズ拡張を気にする必要がないので、配列数が少ない場合は採用してみましょう。

  


新規エクセルブックの作成と確認

 変数の確認が終わったら、ブレークポイントで止まっている状態から再度動かしてみましょう。
 次のブレークポイントで止まった状態で、[C:\temp]フォルダを開くと、[北海道.xlsx]というエクセルファイルが作成されているはずです。
 この処理は[Set objWorkbook = objXlsApp.Workbooks.Add]で新規ブックが作成され、[objWorkbook.SaveAs (“C:\temp\” & strText & “.xlsx”)]にて、ファイルが保存されいるためです。

[Set objWorksheet = objWorkbook.Worksheets.Add]のとこで、ブレークポイントを設定すると、シートが作成されていく様子が確認できます。([objWorkbook]のオブジェクトにシートが増えていくのを見ることが出来ます)

  


新規シートの作成と確認

 最後に、処理が終わるまで実行してみましょう。そして、処理が終わったら再度[C:\temp]フォルダを確認してください。3個のエクセルファイルが出来ているがわかります。
 次にどれか一つエクセルファイルを開いて、シートが作成されているかを確認してみましょう。
 下記図の通りシートが作成されていれば成功です。

  


最後に

 今回は3個のエクセルファイルと5個のシートを新規で作成するという内容でしたが、数を変えるだけでより多くのエクセルファイルやシートを作成することが出来ます。
 また、作成するエクセルファイルやシートの量を増やしても、それほど記述するコードの量は変わらないと思います。これはブックやシートオブジェクトを効率よく使用出来ているからになります。

 別のエクセルファイルやシートを読み込んで、そこに記載されている名前でファイルを作ったりシートを作ったりすることは、業務よくあるシチュエーションです。ループの使い方も含めて勉強しておきましょう。

  

 次回はこの応用で、新規作成したシートに値を記入してみたいと思います。

  

前回-関連記事

このページで学習出来る事  VBAトレーニング3回目となる今回は、前回に引き続きExcelブックとシートの使い方について説明をしていきたいと思います。  ただ単純にシートを切り替えたり、削除したりするコードを覚えるのではなくブック[…]

VBAトレーニング-03
次回-関連記事

このページで学習出来る事  VBAトレーニング5回目となる今回は、前回に引き続きExcelブックとシートの使い方について説明をしていきたいと思います。  ただ単純にシートを切り替えたり、削除したりするコードを覚えるのではなくブック[…]

VBAトレーニング-05