ファイルやブックを好きな場所に大量に作る
動画で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桁の数字)。
●タイムライン
- 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 - おわり
動画の解説記事(ファイルシステムオブジェクトを使わないケース)
前回の動画では、フォルダーを作りましたので、
今回はブックを大量に作成するという内容です。
そのブックは、好きな場所に好きな名前で好きなだけ作るというような形にしていきたいと思います。
作成するブックの名前リストがあるという設定です。
'/****** 配列に格納 *********** 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は使わなくても作れるわけです。
以下が今回のブック作成マクロです。説明の前に、ブックを作成するマクロを先に実行してみます。
作成したブックを保存するフォルダを指定しなかったので、このThis workbookと同じフォルダー内に ブックは保存されました。リストにある名前でブックが20個作成されています。
また、コードの始めの方で、Application.ScreenUpdating = Falseに設定していたので、 画面に作成されていくブックの様子が表示されず、画面がちらつきませんでした。実行速度も早くなっています。コードの終わりの直前にて、 Application.ScreenUpdating = Trueで設定を戻しています。
ワークブックをシートのリスト名から作るマクロ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 と宣言しました。
さらに、ブックを100個作る場合などは、よく連番を使うことがあるので、連番のケースでコードを記述しています。
さて実行したいのですが、さすがに100個作って、そのブックで画面いっぱいになっては困りますから、 ThisWorkBook以外を閉じる、部品マクロを作成することにしましょう。
本体のマクロコードに、呼び出すために、 Call Otherbooks_Close と記述しました。
また作成するブックを100から30に減らしました。
30個のブックが指定フォルダに作成されました。
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