Clik here to view.

photo credit: Fygget Cat file escapes via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでファイルやフォルダを操作するFileSystemオブジェクトの使い方を連載でお伝えしています。
前回の記事はこちら!
FileSystemオブジェクトでファイルやフォルダが存在するかを判定する方法をお伝えしました。
さて、判定するのはいいですが、目的のフォルダが存在しなかったとき、どうしましょう?
フォルダの判定確認をするということは、VBAプログラムで使いたい可能性が高いですよね。
そんな時は、作ってしまえ!
ということで、エクセルVBAで指定のフォルダの存在確認をして、存在しなかった場合にフォルダを作成する方法についてお伝えします。
今回もFileSystemオブジェクトを使いますよ。
では、行ってみましょ!
前回のおさらい:フォルダの存在チェック
前回作成したプログラムはこちらでした。
Sub フォルダの存在確認をする() Dim objFso As Object Set objFso = CreateObject("Scripting.FileSystemObject") Debug.Print objFso.FolderExists(ThisWorkbook.Path & "\pdf") Debug.Print objFso.FolderExists(ThisWorkbook.Path & "\エクセル") Set objFso = Nothing End Sub
FolderExistsメソッドを使って、Thisworkbookと同階層のフォルダ内に「pdf」または「エクセル」というフォルダが存在するかどうかを判定する内容です。
存在していればTrue、そうでなければFalseがイミディエイトウィンドウに出力されます。
今回は、ただ判定するだけでなく、フォルダがなかったら作成するように、変更をしていきたいと思います。
FolderExistsメソッドをIf文の条件式として使う
FolderExistsメソッドはTrueまたはFalseを返しますから、そのままIf文の条件文に使用することができます。
例えば、このようなプログラムですね。
Sub フォルダの存在確認をする() Dim objFso As Object Set objFso = CreateObject("Scripting.FileSystemObject") If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then MsgBox "フォルダpdfは存在しています" Else MsgBox "フォルダpdfは存在していません" End If Set objFso = Nothing End Sub
pdfフォルダが存在していれば「フォルダpdfは存在しています」、さもなくば「フォルダpdfは存在していません」と表示されます。
条件分岐の結果、Falseならフォルダを作成するようにすればよいのですね。
CreateFolderメソッドでフォルダを作成する
フォルダを作成するには、FileSystemオブジェクトのCreateFolderメソッドを使います。
書き方はこちらです。
実際のプログラムとしては、このようなものが考えられるでしょう。
Sub フォルダの存在確認をしてなければ作成する() Dim objFso As Object Set objFso = CreateObject("Scripting.FileSystemObject") If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then MsgBox "フォルダpdfは存在しています" Else objFso.CreateFolder (ThisWorkbook.Path & "\pdf") MsgBox "フォルダpdfは存在しなかったので作成しました" End If Set objFso = Nothing End Sub
このプログラムでは判定してから存在しない場合のみ作成をするので問題ありませんが、既に存在するフォルダを指定するとエラーになるので注意ください。
CreateFolderメソッドはフォルダのパスを返す
また、CreateFolderは返り値として作成したフォルダのパスを返しますので
Sub フォルダの存在確認をしてなければ作成する() Dim objFso As Object Set objFso = CreateObject("Scripting.FileSystemObject") Dim strFolderPath As String If objFso.FolderExists(ThisWorkbook.Path & "\pdf") Then MsgBox "フォルダpdfは存在しています" Else strFolderPath = objFso.CreateFolder(ThisWorkbook.Path & "\pdf") MsgBox "フォルダpdfは存在しなかったので作成しました" & vbNewLine & strFolderPath End If Set objFso = Nothing End Sub
11行目のように変数にフォルダパスを取得できます。これは、けっこう使い場所が多いと思いますよ。
pdfフォルダが存在しない場合は、以下のようにフォルダも作成されつつ、メッセージが表示されます。
Image may be NSFW.
Clik here to view.
まとめ
エクセルVBAでフォルダの有無を判定し、なければフォルダを作成する方法についてお伝えしました。
FolderExistsメソッドで存在を確認し、CreateFolderメソッドでフォルダを作成します。
使いどころの多いテクニックだと思いますので、ぜひマスター頂ければと思います。
次回は、FileSystemオブジェクトを使って特定のフォルダ内のファイル一覧を出力する方法についてお伝えします。
どうぞお楽しみに!