コレクションページ

エクセルマクロでフォルダー作成

エクセルマクロで何かを作成したとき、作成する前のファイルをバックアップしたり、作成したファイルをフォルダーに保存しておきたい時が有ります。 ココではエクセルマクロで、ファイルを保存するフォルダーを作成する方法を記載します。
やり方は色々とあるので他でも調べていただき、自分に合ったやり方をしてください。
こちらのページも参考になれば幸いです。

●フォルダーを作成する関数1

以下はフォルダーを作成する方法です。
エクセルマクロで以下の関数を呼ぶと、Dドライブにエクセルマクロというフォルダーを作成します。
(例)
'*****************************
'フォルダー作成
'*****************************
Sub フォルダー作成()
 Dim MK_DIR_NAME As Variant

  MK_DIR_NAME = "D:\エクセルマクロ"
  If Dir(MK_DIR_NAME, vbDirectory) = "" Then
   MkDir MK_DIR_NAME
  End If
End Sub

(解説)
・Sub フォルダー作成()
関数の名前です。Sub ***()で***が関数名になります。
・Dim MK_DIR_NAME As Variant
作成したいフォルダーのフルパス名を代入する型を定義します。
ココではMK_DIR_NAMEという名前の箱を用意します。(フォルダーのフルパス名をいれるエリアを定義します。)
・MK_DIR_NAME = "D:\エクセルマクロ"
作成したいフォルダーのフルパス名を代入します。
・If Dir(MK_DIR_NAME, vbDirectory) = "" Then
MK_DIR_NAMEで指定したフォルダーの有無の判定をします。
フォルダーが無ければ次の行(フォルダー作成)の処理をします。
・MkDir MK_DIR_NAME
MK_DIR_NAMEで指定したフォルダーを作成します。
・End If
フォルダー作成処理を終了します。

※D:\エクセルマクロを変更すれば好きな場所(Cドライブ)や、名前のフォルダーを作成出来ます。

●フォルダーを作成する関数2

以下は汎用性を持たせたフォルダー作成例です。
関数を呼ぶときに、引数で作成フォルダー名を渡し、作成したいフォルダーを作成する方法です。
戻り値でフォルダーが作成されたか(戻り値"1")、既にフォルダーが存在し作成されなかったか(戻り値"0")を判断します。
(例)
'*****************************
'フォルダー作成
'*****************************
Function フォルダー作成(MK_DIR_NAME As Variant)
 Dim MK_DIR_OK As String

 MK_DIR_OK = "0"
 If Dir(MK_DIR_NAME, vbDirectory) = "" Then
  MkDir MK_DIR_NAME
  MK_DIR_OK = "1"
 End If
 フォルダー作成 = MK_DIR_OK
End Function

(解説)
・Function フォルダー作成(MK_DIR_NAME As Variant)
関数の名前です。Function ***(####)で***が関数名になり、####はVariant型の引数になります。
Functionは戻り値があることを示します。
・Dim MK_DIR_OK As String
フォルダーが作成されたか(戻り値"1")、既にフォルダーが存在し作成されなかったか(戻り値"0")の判定結果を入れておきます。ココではMK_DIR_OKという名前の箱を用意(定義)します。
・MK_DIR_OK = "0"
とりあえず作成されていない判定データをセットします。
・If Dir(MK_DIR_NAME, vbDirectory) = "" Then
MK_DIR_NAMEで指定したフォルダーの有無の判定をします。
フォルダーが無ければ次の行(フォルダー作成)の処理をします。
・MkDir MK_DIR_NAME
MK_DIR_NAMEで指定したフォルダーを作成します。
・MK_DIR_OK = "1"
フォルダーが作成されたことを知らせる判定結果を入れておきます。
・End If
フォルダー作成有無の判定処理を終了します。
・フォルダー作成 = MK_DIR_OK
フォルダー作成の判定を、この関数を呼び出した関数へ戻り値で返します。
・End Function
処理を終了します。

※MK_DIR_NAMEにデータが入っているか判定をしてから、フォルダーの有無判定をしても良いかと思います。