こんにちは、blueです。
前回は実践編の二回目としてォルダ内の最新ファイルを取得する方法について説明しました。
前回の記事はこちら
今回は365日分のファイルを作成する方法を紹介します。
今回のコード
今回は指定フォルダ内に1~12月分のフォルダを作成するとともに、その中に「yymmdd.xlsx」のファイルを作成します。
なおこのファイルはフォーマットファイル(FMT.xlsx)をコピーして作成します。
コード
実際のコードは以下になります。
なお「”フォーマットファイルのフルパス”」の部分はコピー元となるフォーマットファイルのフルパスを入れるようにしてください
Sub CreateFolderFile1()
'フォルダを作成する場所を指定する(FileDialogとGetFolder)
'1月~12月のフォルダを作成する(i)
'中に年月日のファイルを作成する(j)
Dim FD As FileDialog
Dim FolderName As String
Dim FSO As Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim objFile As Scripting.File
Dim objSubFolder As Scripting.Folder
Dim i As Long, j As Long
'フォルダを作成する場所を指定する(FileDialogとGetFolder)
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
If FD.Show = True Then
FolderName = FD.SelectedItems(1)
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.getFolder(FolderName)
Else
Exit Sub
End If
'1月~12月のフォルダを作成する(i)
'年月日のファイルを作成する(j)
Set objFile = FSO.getFile("フォーマットファイルのフルパス")
For i = 1 To 12
Set objSubFolder = FSO.CreateFolder(objFolder.Path & "\" & Format(i, "00") & "月")
For j = 1 To 31
FSO.CopyFile objFile.Path, objSubFolder.Path & "\21" & Format(i, "00") & Format(j, "00") & ".xlsx"
Next j
Next i
Set FSO = Nothing
End Sub
コードの詳細は以降で詳しく説明します。
コードの説明
オブジェクトの宣言
Dim FD As FileDialog
Dim FolderName As String
Dim FSO As Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim objFile As Scripting.File
Dim objSubFolder As Scripting.Folder
Dim i As Long, j As Long
今回必要なオブジェクトはFileDialogとFSO,ファイルオブジェクトとフォルダオブジェクトです。
また各々のサブフォルダも取得する必要があるのでobjSubFolderとして宣言しておきます。
別に月と日でループさせる用の変数を用意します。
フォルダ名の取得とオブジェクトの取得
'フォルダを作成する場所を指定する(FileDialogとGetFolder)
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
If FD.Show = True Then
FolderName = FD.SelectedItems(1)
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.getFolder(FolderName)
Else
Exit Sub
End If
前回同様Application.FileDialog(msoFileDialogFolderPicker)で「フォルダを選択」ダイアログを立ち上げてフォルダ名を取得しています。
コードの詳しい説明はこちら
またFSOオブジェクトを取得したのちにフォルダオブジェクトを取得しています。
コードの詳しい説明はこちら
フォーマットファイルを取得して月のフォルダと年月日のファイルを作成する
'1月~12月のフォルダを作成する(i)
'年月日のファイルを作成する(j)
Set objFile = FSO.getFile("C:\Users\Public\Documents\FMT.xlsx")
For i = 1 To 12
Set objSubFolder = FSO.CreateFolder(objFolder.Path & "\" & Format(i, "00") & "月")
For j = 1 To 31
FSO.CopyFile objFile.Path, objSubFolder.Path & "\21" & Format(i, "00") & Format(j, "00") & ".xlsx"
Next j
Next i
まず最初にFSO.getFileでフォーマットファイルを取得します。
ここでは”C:\Users\Public\Documents\FMT.xlsx”としていますが求めるファイルに書き換えてください。
その後For~Nextで月のフォルダと、年月日のフォルダを作成します。
最初にFSO.CreateFolderにて最初に取得したフォルダオブジェクトの配下に〇月のフォルダを作成しています。
またここで作成したフォルダオブジェクトをobjSubFolderとして取得しています。
次にFSO.CopyFileにてフォーマットファイルをobjSubFolderの配下に作成しています。
FSOのプロパティとメソッドの詳しい説明はこちら
Format関数については割愛しますが以下TipsFoundさんのサイトに詳しく書かれていますので参考ください。
これで各月にyymmdd.xlsxで表されたファイルが作成されます。
なお今回は各月31日まで作成される為不要なファイルは削除する必要があります。
mmまで調整したい場合は以下の記事のEOMonth関数を参考ください。
詳しい記事はこちら
まとめ
今回は 今回は365日分のファイルを作成するコードを紹介しました。
この方法を応用すれば階層構造を持ったフォルダとファイルを作成することが可能です。
多くのフォルダやファイルを作らないといけない場合などに使っていただければ幸いです。
コメント