ファイルやブックを好きな場所に大量に作る

マクロ講座 動画編 06回
マクロ講座

動画でExcel ファイルやブックを好きな場所に大量に作る

ファイルやブックを好きな場所に大量に作る

動画と記事で解説する「マクロ講座」です。
今回はシートにリストアップされた名前を使って、好きなだけエクセルのブックを作成するというマクロを考えていきたいと思います。 また、連番を使った規則的な名前のブックも大量に作成するマクロも作ります。 ブックを作るには、Workbooksオブジェクトの「Add」メソッドを使用します。そしてブックを保存するには、「SaveAs」メソッドを使用して名前をつけて保存します。
(サンプルファイルは、こちらです。 ファイルやブックを好きな場所に大量に作る、サンプル04回

マクロ動画 ファイルやブックを好きな場所に大量に作る

「マクロ講座入門編EX 06回で学べること」は以下の内容です。

この記事で学べること

  • 1.VBAを使用して、連番やユニークな名前を付けたExcelブックを好きな場所に大量に作成する。
  • 2.Microsoft Scripting Runtime Libraryを使用して、ブックを保存するフォルダを作成する。
  • 3.Application.ScreenUpdatingを利用して、ブック作成中のパフォーマンスを向上させ、画面の clutter を減らす。
  • 4.Workbooks.Addメソッドを使用して新しいブックを作成し、カスタム名を割り当てる。
  • 5.特定の場所にブックを保存するために、カスタムファイルパスを設定する。
  • 6.ファイルパスに必要なファイル拡張子(.xlsx)とフォルダディレクトリ記号を追加する。
  • 7.作成したブックを閉じて画面をすっきりさせるために、「otherbooks close」関数を呼び出す。
  • 8.作成するブックの数を調整し、Format関数を使用して特定の形式で数字を表示する(例: 3桁の数字)。
https://youtu.be/KwO01jSICh4

●タイムライン

  • 00:00 - イントロ
  • 00:31 - テーマ紹介 好きな場所に好きな名前で好きなだけ作る
  • 00:59 - MicrosoftのScripting Runtime Library を参照する理由
  • 01:51 - 生徒の人数分のブックを作成
  • 03:18 - 作成されたブック
  • 03:46 - マクロのコード説明
  • 09:44 - ブックを30個作るマクロ実行
  • 11:20 - まとめ
  • 12:34 - エンディング 
  • 15:36 - おわり

動画の解説記事(ファイルシステムオブジェクトを使わないケース)

前回の動画では、フォルダーを作りましたので、 今回はブックを大量に作成するという内容です。
そのブックは、好きな場所に好きな名前で好きなだけ作るというような形にしていきたいと思います。
作成するブックの名前リストがあるという設定です。

ブックを大量一括作成1
'/******   配列に格納   ***********
Sub CreateMultipleFolders_array()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim folder_paths(), path
    folder_paths = Array("D:\SampleTestFolder\NewFolder1", _
                            "D:\SampleTestFolder\NewFolder2", _
                            "D:\SampleTestFolder\NewFolder3")
    For Each path In folder_paths
        fso.CreateFolder path
    Next path
End Sub

前回のフォルダの作成のコードの1例が以下の図ですが、今回はブックです。 MicrosoftのScripting Runtimeを参照設定して FileSytemObjectを使っています。
今回作成するのは、ブックですから、ブックというのはExcelの配下にある部品です。 そのMicrosoftのScripting Runtimeは使わなくても作れるわけです。

ブックを大量一括作成2

以下が今回のブック作成マクロです。説明の前に、ブックを作成するマクロを先に実行してみます。

ブックを大量一括作成3

作成したブックを保存するフォルダを指定しなかったので、このThis workbookと同じフォルダー内に ブックは保存されました。リストにある名前でブックが20個作成されています。

ブックを大量一括作成4

また、コードの始めの方で、Application.ScreenUpdating = Falseに設定していたので、 画面に作成されていくブックの様子が表示されず、画面がちらつきませんでした。実行速度も早くなっています。コードの終わりの直前にて、 Application.ScreenUpdating = Trueで設定を戻しています。

ブックを大量一括作成5

ワークブックをシートのリスト名から作るマクロ1

最初のコードはこちらです。このケースでは、ブックの保存先を指定していません。

Option Explicit 'Workbook.SaveAs メソッドを使う
    Dim ws As Worksheet, i As Long, lastrow As Long
Sub ワークブックをシートのリスト名から作る()
    Application.ScreenUpdating = False
    Set ws = sh_list
    lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

        For i = 1 To lastrow
            Workbooks.Add
            ActiveWorkbook.SaveAs ws.Range("A" & i) & ".xlsx"
        Next i

    Call Otherbooks_Close
    Application.ScreenUpdating = True
End Sub

ブックの保存先を自由に指定する場合。 保存先を指定する変数を宣言し、そこに保存先のアドレスを入れる。
サンプルでは、Dim fPath As String と宣言しました。

ブックを大量一括作成7

さらに、ブックを100個作る場合などは、よく連番を使うことがあるので、連番のケースでコードを記述しています。

ブックを大量一括作成8

さて実行したいのですが、さすがに100個作って、そのブックで画面いっぱいになっては困りますから、 ThisWorkBook以外を閉じる、部品マクロを作成することにしましょう。

ブックを大量一括作成9

本体のマクロコードに、呼び出すために、 Call Otherbooks_Close と記述しました。
また作成するブックを100から30に減らしました。

ブックを大量一括作成9

30個のブックが指定フォルダに作成されました。

ブックを大量一括作成10
Public Sub Otherbooks_Close()
    Dim wb As Workbook

    For Each wb In Workbooks
        If wb.Name <> ThisWorkbook.Name Then
        '今回はブックを保存せず閉じる(すでに保存済みだから)
            wb.Close SaveChanges:=False
         '保存して閉じる場合は以下
'            wb.Close SaveChanges:=True
        End If
    Next
End Sub