【VBA入門】MkDirでフォルダを作成し、ブックを保存する方法

MkDirステートメントって使っていますか?MkDirステートメントはフォルダを作成する場合に使います。

VBAでブックを作成し、処理を行って保存することはよくあるかと思います。そんなときに、ブックを保存するためのフォルダも作らなければならないことも多いですよね。

そこでこの記事では、

  • MkDirでフォルダを作成する方法
  • <

  • ブックに名前をつけて保存する方法
  • FileSystemObjectの使い方
  • フォルダを作成する際の注意点
  • 複数の階層のフォルダを作成する方法

など基本的な内容から、応用的な内容についても解説していきます。

今回はフォルダを作成する方法とファイルに名前を付けて保存する方法について、使い方をわかりやすく解説します!

MkDirでフォルダを作成する方法

フォルダを作成するには、MkDirステートメントを使います。

MkDirステートメントは以下のように記述します。

pathnameには、作成するフォルダのパスを指定します。

サンプルコードで確認しましょう。

このサンプルコードを実行すると、Excelのオプションで指定しているカレントフォルダにtestというフォルダが作られます。

セルの文字列をもとにフォルダを作成

Excelシートのセルに記入したフォルダ名を取得して、フォルダを作成するコードをご紹介します。ちなみに、Excelシートのセル”A1”には”test”と記述しています。

Excelシート:
MkDir01

このサンプルコードを実行すると、Excelのオプションで指定しているカレントフォルダにtestというフォルダが作られます。

ブックに名前をつけて保存する方法

ブックを保存するためのフォルダの作り方がわかりましたので、これからはブックを保存する方法について解説していきます。

名前を付けて保存するには、WorkbookオブジェクトのSaveAsメソッドを使用します。

SaveAsメソッドは以下のように記述します。

引数FileNameは保存するブックの名前をパスで指定します。

引数にはその他にも、ファイル形式を指定するFileFormat、パスワードを設定するPassword、読み取り専用を指定するReadOnlyRecommendedなど多くの種類があります。

詳細は公式サイトを参照してください。

それではSaveAsメソッドの使い方について、自身を別名で新規保存するサンプルコードで確認しましょう。

ダイアログを開いて保存

ダイアログを開いて保存するには、ApplicationオブジェクトのGetSaveAsFilenameメソッドを使います。

GetSetSaveAsFilenameメソッドは指定したファイル名を返します。ダイアログでキャンセルした場合には、Falseが返ってきます。

サンプルコードで確認しましょう。

実行結果:
MkDir03

拡張子をCSVで指定して保存

拡張子をCSVで指定して保存するには、SaveAsメソッドの第2引数のFileFormatをxlCSVで指定します。

サンプルコードで確認しましょう。

その他の拡張子で保存したい場合は、公式サイトを参考にしてください。

保存して閉じる方法

ブックを保存した後に閉じたい場合があります。

ブックを閉じるには、Closeメソッドを使用します。

サンプルコードで確認しましょう。

このサンプルコードでは、SaveAsメソッドを使ってブックを保存したあと、Closeメソッドでブックを閉じています。ブックを閉じる際に、変更を保存するか確認メッセージが表示されますが、これを表示しないように設定しています。

また、ブックを閉じる前にWorkbookオブジェクトのSavedプロパティを使って、保存されたのを確認してからブックを閉じています。

FileSystemObjectの使い方

もう1つ新しいフォルダを作成する方法があります。それは、FileSystemObjectオブジェクトのCreateFolderメソッドを使う方法です。

CreateFolderメソッドは以下のように記述します。

引数foldernameは作成するフォルダのパスを指定します。

CreateFolderメソッドはフォルダの作成に成功すると、そのフォルダのパスを文字列で返します。

サンプルコードで確認しましょう。

このサンプルコードを実行すると、Excelのオプションで指定しているカレントフォルダにtestというフォルダが作られます。

フォルダを作成する際の注意点

MkDirステートメントやCreateFolderメソッドでフォルダを作成する際に、すでにフォルダが存在している場合はエラーが発生します。フォルダの存在をチェックする方法にはDir関数を使う方法とFolderExistsメソッドを使う方法があります。

Dirでフォルダの存在をチェックする方法

Dir関数は第2引数でvbDirectoryを指定すると、第1引数で指定したパスのフォルダが存在しない場合は空文字を返します。

これを使ってフォルダの存在チェックをする方法は以下のとおりです。

実行結果:
MkDir02

Dir関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

VBAでファイル名を取得するには?3+1のパターンで速攻理解!
更新日 : 2019年4月25日

FolderExistsでフォルダの存在をチェックする方法

FileSystemObjectオブジェクトを使う場合は、FolderExistsメソッドでフォルダの存在をチェックすることができます。

FolderExistsメソッドは引数にフォルダのパスを指定し、フォルダが存在する場合はTrueを返します。

これを使ってフォルダの存在チェックをする方法は以下のとおりです。

実行結果:
MkDir02

複数の階層のフォルダを作成する方法

フォルダを作成する際に注意しなければならないのが、絶対パスで指定する場合にその親フォルダ自体が存在しない場合です。その場合は存在するフォルダやドライブまでさかのぼって、必要となる複数の階層のフォルダを作成する必要があります。

複数階層のフォルダを作成するにはMkDirを使う方法とWindows APIのSHCreateDirectoryExを使用する方法があります。

MkDirで複数階層のフォルダを作成

MkDirステートメントは、複数の階層を1回で作成することはできません。

階層を追って1階層ずつ作成する必要があります。

階層を追って1階層ずつ作成する例をご紹介します。

このサンプルコードでは、フォルダ「C:\2017\09」を作成するために、まず文字列”C:”、”2017″、”09″を配列arrに格納しています。

これをForループで繰り返すと、フォルダパスが”C:\2017″、”C:\2017\09″となりますので、その都度フォルダが存在するかDir関数を使って確認しています。

フォルダが存在しなければ、MkDirステートメントを使ってフォルダを作成しています。

SHCreateDirectoryExを使う方法

Windows APIのSHCreateDirectoryExでは、複数の階層を1回で作成することができます。

以下を参考にしてみてください。

SHCreateDirectoryExはフォルダの作成に成功すると0を返します。

フォルダがすでに存在していると183を返します。

まとめ

ここでは、フォルダを作成する方法ブックに名前を付けて保存する方法について説明しました。フォルダを作成するには、MkDirステートメントを使用します。

また、ブックに名前を付けて保存するには、SaveAsメソッドを使用します。どちらも使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説