Excel VBAで保存先フォルダを指定するのは意外と大変です。
けれどもフォルダ参照ダイアログを利用し、保存先を指定することが出来ます。
ディレクトリを変数化しコード埋め込みをすることも簡単に出来ます。
エクセルを使った業務で、「作成したファイルの保存」は作業の最後に必ず必要な部分です。
今回は、この「作成したファイルの保存」を行うための重要部分。保存先フォルダをVBAで指定する方法を説明します。
こんにちは、じゅんぱ店長(@junpa33)です。

















コンテンツ
Excel VBA 保存先フォルダをダイアログ指定で変数化
エクセルを使って業務を行う上で、VBAを使って作業スピードを上げる、
業務の効率化を図っておられる方も多いのではと思います。
VBAを使い「これでエクセルでの業務完了。この作業ファイルを保存しましょう。」という時に、
普通に「ファイル」→「名前を付けて保存」→
→(ファイル保存ダイアログを開いて)フォルダを選んで「ファイル名」を書き「保存」ボタン
になっている方も多いと思います。
折角、VBAを使っているのですから、ここは少し考えてみましょう。
たぶん、そこまで手を出さないのは、
VBAコード組みが進めないネックは、どこのフォルダに保存するか決まっていないから!
ではないでしょうか。
今回は、このお悩み解決で、
保存先フォルダをダイアログで簡単指定してさらに変数化する方法を説明します。
- このサンプルVBAは「book1.xlsm」に記述されています。
- 「VBAフォルダ指定」フォルダに保存されています。
- この「VBAフォルダ指定」フォルダには、データ保存用として
「Data1」「Data2」「Data3」のフォルダがあります。
FileDialogオブジェクトを使いフォルダ選択ダイアログを表示
「FolderPathA」という変数に指定フォルダの絶対パス(フルパス)が代入されます。
Sub フォルダOpen1() Dim FolderPathA As String With Application.FileDialog(msoFileDialogFolderPicker) 'デフォルトで表示するフォルダ .InitialFileName = ThisWorkbook.Path & "\" 'フォルダを選択し「OK」をクリック If .Show = True Then '選択したフォルダのフルパスを入手 FolderPathA = .SelectedItems(1) Else 'キャンセルを選択 MsgBox "フォルダ選択がキャンセルされました。", vbExclamation End If End With 'デバッグプリント(説明用です) Debug.Print "FolderPathA = " & FolderPathA End Sub
VBAコードを実行すると、このようなダイアログが表示されます。
デフォルトのダイアログ表示は、「ThisWorkbook.Path」のディレクトリになります。
フォルダを選択して「OK」をクリックします。
変数FolderPathAにパスがセットされました。
Shell関数を使ってフォルダの選択ダイアログを表示します
「FolderPathB」という変数に指定フォルダの絶対パス(フルパス)が代入されます。
Sub フォルダOpen2() Dim Shell As Object Dim FolderPathB As String Set Shell = CreateObject("Shell.Application") _ .BrowseForFolder(0, "フォルダを選択してください", 0, ThisWorkbook.Path) 'キャンセルを選択 If Shell Is Nothing Then FolderPathB = "" MsgBox "フォルダ選択がキャンセルされました。", vbExclamation Exit Sub Else 'フォルダを選択し「OK」をクリック '選択したフォルダのフルパスを入手 FolderPathB = Shell.Items.Item.Path End If 'デバッグプリント(説明用です) Debug.Print "FolderPathB = " & FolderPathB End Sub
VBAコードを実行すると、このようなダイアログが表示されます。
デフォルトのダイアログ表示は、「ThisWorkbook.Path」のディレクトリになります。
フォルダを選択して「OK」をクリックします。
変数FolderPathBにパスがセットされました。
保存先フォルダをダイアログ指定で変数化 まとめ
実際にVBEに記述するとこのようになります。

2種類のプロシージャーを実行すると、変数にはこのように値が代入されています。

エクセルファイルを保存する時に、この変数を保存先ディレクトリとして指定すればOKになります。
この様に毎回、ダイアログで保存指定先を変更することで、その度に違うフォルダにファイルを保存することが出来ます。
簡単なコードですので、あなたのVBAコードに埋め込んで、利用してみてください。
短期間でエクセルVBAの独学習得を目指したいなら
エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。
けれども、
出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。
独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。
先人が行った勉強方法をあなたがそのまま利用すればよいということです。
独習のための大切な7つのポイントは、上記記事にて解説しています。
独習によるVBA習得のキーワードは、
出来るだけ多くの実例に触れること!
です。
正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。
ハッキリ言って、
本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。
このサイトでよく使うVBAのコードのトピックを纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。