【Excel VBA】フォルダを新規作成する(MkDir/CreateFolder)

はじめに

今回は、フォルダを新規作成する方法について解説します。
汎用性の高いサンプルコード、「当日の日付フォルダを作成」「フォルダを一括で作成」などを掲載しています。

この記事を読むメリット
  • フォルダを新規作成する方法が分かります。
  • 基本的な構文、引数の意味から丁寧に解説します。
  • フォルダ作成時のエラー出力条件、エラーの回避方法についても解説します。
  • コピペで使える実践的なコードを掲載しています。

前提

#ステートメント/メソッド説明
1MkDirフォルダを新規に作成します。
2CreateFolderフォルダを新規に作成します。
※FileSystemObjectを使用します。
フォルダの新規作成 – ステートメント/メソッド
めい

2パターンをご紹介しましたが、基本的に挙動に違いはありません。

基本情報

MkDirステートメント

構文

構文

MkDir Path

緑色は引数です。

引数

#引数必須/任意説明
1Path必須フォルダパスを指定します。
フォルダ名で指定での指定も可能です。
その場合はカレントフォルダにフォルダが作成されます。
MkDir – 引数

既に存在しているフォルダを指定するとエラーとなります。
使用の際は、フォルダの存在チェックを実施するなどの工夫をしましょう。

CreateFolderメソッド

FileSystemObjectを使用し、フォルダを作成するにはCreateFolderメソッドを使用します。

構文

構文

FileSystemObject.CreateFolder(Path)

引数

#引数必須/任意説明
1Path必須フォルダパスを指定します。
フォルダ名で指定での指定も可能です。
その場合はカレントフォルダにフォルダが作成されます。
CreateFolder – 引数

既に存在しているフォルダを指定するとエラーとなります。
使用の際は、フォルダの存在チェックを実施するなどの工夫をしましょう。

サンプルコード

フォルダを作成する(MkDirステートメント)

サンプルコード
Public Sub createFolderForMkDir()
    Dim createFolderPath As String    ' 作成フォルダパス

    ' 作成フォルダパスの設定
    createFolderPath = "C:\vba-hack\TestFolder"

    ' ファイル作成
    MkDir createFolderPath
End Sub

フォルダを作成する(CreateFolderメソッド)

サンプルコード
Public Sub createFolderForFSO()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim createFolderPath As String  ' 作成フォルダパス

    ' 作成フォルダパスの設定
    createFolderPath = "C:\vba-hack\TestFolder"

    ' ファイル作成
    fso.CreateFolder (createFolderPath)
End Sub

当日の日付のフォルダを作成する

サンプルコード
Public Sub createFolderForToday()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim createFolderPath As String  ' フォルダ作成パス
    Dim todayFolderName As String   ' 当日日付

    ' 当日日付(フォルダ名)取得
    todayFolderName = Format(Date, "yyyymmdd")

    ' 作成フォルダパスの設定
    createFolderPath = "C:\vba-hack\" & todayFolderName

    ' フォルダの存在チェック
    If Not fso.FolderExists(createFolderPath) Then

        ' 日付フォルダが存在しない場合

        ' フォルダ作成
        fso.CreateFolder (createFolderPath)
    End If
End Sub
共通化のサンプルコード

呼び出し – メインプロシージャ

サンプルコード
Public Sub createFolder()
    Dim createFolderPath As String  ' フォルダ作成パス

    ' フォルダ作成パスを設定
    createFolderPath = "C:\vba-hack\"

    ' フォルダの作成
    Call createFolderForToday(createFolderPath)
End Sub

当日の日付のフォルダを作成 – サブプロシージャ

サンプルコード
Public Sub createFolderForToday(ByVal createFolderPath As String)
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim todayFolderName As String   ' 当日日付

    ' 当日日付(フォルダ名)取得
    todayFolderName = Format(Date, "yyyymmdd")

    ' 作成フォルダパスの設定
    createFolderPath = createFolderPath & todayFolderName

    ' フォルダの存在チェック
    If Not fso.FolderExists(createFolderPath) Then

        ' 日付フォルダが存在しない場合

        ' フォルダ作成
        fso.createFolder (createFolderPath)
    End If
End Sub
めい

フォルダを作成したいフォルダパスを渡すと当日日付のフォルダを作成するロジックです。

セルに入力されたフォルダ名を一括で作成する

サンプルコード
Public Sub createFolderForCellValue()
    Dim fso As New FileSystemObject ' FileSystemObjectインスタンス
    Dim createFolderPath As String  ' フォルダ作成パス
    Dim folderNameArr As Variant    ' 作成フォルダ名 配列
    Dim folderName As Variant       ' 作成フォルダ名

    ' カレントディレクトリを変更
    ChDir "C:\vba-hack"

    ' 作成するフォルダ名をセルから取得
    folderNameArr = Range(Cells(1, 1), Cells(3, 1))

    For Each folderName In folderNameArr

        ' フォルダの存在チェック
        If Not fso.FolderExists(folderName) Then
    
            ' 日付フォルダが存在しない場合
    
            ' フォルダ作成
            fso.CreateFolder (folderName)
        End If
    Next folderName
End Sub

実行前

Before - 作成対象のフォルダ
Before – 作成対象のフォルダ
Before - 作成対象フォルダ名
Before – 作成対象フォルダ名

実行後

After - フォルダ作成
After – フォルダ作成

最後に

今回は、フォルダを新規作成する方法について解説しました。

本記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA