photo credit: Fygget Cat file escapes via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでファイルやフォルダを操作するFileSystemオブジェクトの使い方を連載でお伝えしています。
前回の記事はこちら!
FileSystemオブジェクトでファイルやフォルダが存在するかを判定する方法をお伝えしました。
さて、判定するのはいいですが、目的のフォルダが存在しなかったとき、どうしましょう?
フォルダの判定確認をするということは、VBAプログラムで使いたい可能性が高いですよね。
そんな時は、作ってしまえ!
ということで、エクセルVBAで指定のフォルダの存在確認をして、存在しなかった場合にフォルダを作成する方法についてお伝えします。
今回もFileSystemオブジェクトを使いますよ。
では、行ってみましょ!
目次
前回のおさらい:フォルダの存在チェック
前回作成したプログラムはこちらでした。
1 2 3 4 5 6 7 8 9 10 11 |
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文の条件文に使用することができます。
例えば、このようなプログラムですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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メソッドを使います。
書き方はこちらです。
実際のプログラムとしては、このようなものが考えられるでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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は返り値として作成したフォルダのパスを返しますので
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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フォルダが存在しない場合は、以下のようにフォルダも作成されつつ、メッセージが表示されます。
まとめ
エクセルVBAでフォルダの有無を判定し、なければフォルダを作成する方法についてお伝えしました。
FolderExistsメソッドで存在を確認し、CreateFolderメソッドでフォルダを作成します。
使いどころの多いテクニックだと思いますので、ぜひマスター頂ければと思います。
次回は、FileSystemオブジェクトを使って特定のフォルダ内のファイル一覧を出力する方法についてお伝えします。
どうぞお楽しみに!
連載目次:エクセルVBAでFileSystemオブジェクトを活用する
ファイルやフォルダを操作するのはデリケートな気がしますが、エクセルVBAではFileSystemオブジェクトを使うことでファイル、フォルダ、ドライブをオブジェクトとして安全にそして細やかに操作をすることができます。 このシリーズでは、FileSystemオブジェクトの様々な活用法についてシリーズでお伝えしていきます。- 【エクセルVBA】FileSystemオブジェクトの基本と簡単にフルパスを生成・分解する方法
- 【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する
- 【エクセルVBA】指定のフォルダが存在するか判定して、存在してなければ作成する方法
- 【エクセルVBA】FileSystemオブジェクトとFor Each文でファイル一覧を取得する方法
- 【エクセルVBA】FileSystemオブジェクトでフォルダ内のサブフォルダ一覧を取得する
タカハシノリアキ
最新記事 by タカハシノリアキ (全て見る)
- 【エクセルVBA】指定のフォルダが存在するか判定して、存在してなければ作成する方法 - 2017-04-25
- 「Accessデータベース 本格作成入門」は親しみやすいイラストと解説で学べる初心者向け入門書 - 2017-04-24
- Google Apps ScriptでGoogleドライブ内のファイルを追加・削除・移動をする方法 - 2017-04-23
- ExcelVBA本を一冊書くには、どれだけの文字数と、どれだけの時間が必要だったか - 2017-04-21
- ブログ開設からたった2年で私が出版のチャンスを得た理由 - 2017-04-19