スポンサーリンク

【Excel VBA】FileSystemObjectを使いこなす!(実践編) 第三回目 365日分のファイルを作成する

VBAでの操作

こんにちは、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 & "" & 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 & "" & 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日分のファイルを作成するコードを紹介しました。

この方法を応用すれば階層構造を持ったフォルダとファイルを作成することが可能です。

多くのフォルダやファイルを作らないといけない場合などに使っていただければ幸いです。

コメント

タイトルとURLをコピーしました