Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » MkDirで階層の深いフォルダーを作成する

MkDirで階層の深いフォルダーを作成する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

MkDirで階層の深いフォルダーを作成する

「vba mkdir 階層」
「vba mkdir 中間ディレクトリ」
「vba フォルダ作成 mkdir サブフォルダ」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

VBA(Visual Basic for Applications)のMkDirステートメントで、階層の深いフォルダーを作成するには、どのようなコードを書けばいいのかを探している方による検索でしょうか。

「vba mkdir 再帰的」
といった検索も、おそらく同じだろうと推測しています。

[スポンサードリンク]

MkDirのパスが見つかりませんエラー

例えば「C:\LOG\2016\09」といったフォルダーを作成しようと考えて、
  MkDir "C:\LOG\2016\09"
というステートメントを実行すると、条件によって「パスが見つかりません。」という実行時エラーが発生するときがあります。

どういうときにエラーになるかというと、途中のフォルダーが存在しないときです。

例えば、
「C:\LOG」が存在しないとき、
「C:\LOG」は存在するけれど「C:\LOG\2016」は存在しないとき
いずれも、
  MkDir "C:\LOG\2016\09"
を実行するとエラーが発生します。

MkDirステートメントは、階層の深いフォルダーを一気に作成することはできず、階層を追って順番に作成しなければならないからです。

「vba mkdir 階層」
「vba mkdir 中間ディレクトリ」
「vba フォルダ作成 mkdir サブフォルダ」
「vba mkdir 再帰的」
といった検索をした方は、この解決方法を探していたのだろうと私は推測しています。

深い階層のフォルダーを作成するサンプルマクロ

階層の深いフォルダーを作成するには、以下のようなマクロです。

Sub MkDirで階層の深いフォルダーを作る()

 Dim full_path As String ' 作成するフォルダーのフルパス
 Dim tmp_path As String
 Dim arr() As String
 Dim i As Long

 full_path = "C:\LOG"
 full_path = full_path & "\" & Format(Date, "yyyy")
 full_path = full_path & "\" & Format(Date, "mm")

 arr = Split(full_path, "\")
 tmp_path = arr(0) ' ドライブ名の代入

 For i = 1 To UBound(arr)
  tmp_path = tmp_path & "\" & arr(i)
  If Dir(tmp_path, vbDirectory) = "" Then
   MkDir tmp_path
  End If
 Next i

End Sub

上記のマクロを実行すると、「C:\LOG\2016\09」のような形で、Cドライブの「LOG」フォルダーの下に、マクロを実行した日の年のフォルダーが作成され、年のフォルダーの下に月のフォルダーが作成されます。

サンプルマクロの解説

まず最終的に作成したいフォルダーのフルパスを変数・full_pathに格納しています。
  full_path = "C:\LOG"
  full_path = full_path & "\" & Format(Date, "yyyy")
  full_path = full_path & "\" & Format(Date, "mm")

作成したフルパスを、Split関数を使ってフォルダーごとに配列にして、
  arr = Split(full_path, "\")
変数・tmp_pathにドライブ名を格納しておきます。
  tmp_path = arr(0)

配列の2つ目の要素から、最後の要素までFor~Nextループを回して、深い階層のフォルダーを順番に作成する処理に入ります。
  For i = 1 To UBound(arr)

作成したいフォルダーのパスを変数・tmp_pathに格納して、
   tmp_path = tmp_path & "\" & arr(i)

そのフォルダーが存在するかどうかをDir関数で調べて、
   If Dir(tmp_path, vbDirectory) = "" Then

存在しなかったときに、フォルダーを作成しています。
    MkDir tmp_path

ローカルウィンドウで、配列変数・arrの各要素にどのような文字列が格納されているか、For~Nextループが回るごとに、変数・tmp_pathにどのような文字列が格納されているかを確認しながら、ステップ実行してみてください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » MkDirで階層の深いフォルダーを作成する

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy