VBA 保存先フォルダをダイアログ指定で変数化

vbafoldereyecatch

Excel VBAで保存先フォルダを指定するのは意外と大変です。

けれどもフォルダ参照ダイアログを利用し、保存先を指定することが出来ます。

ディレクトリを変数化しコード埋め込みをすることも簡単に出来ます。

エクセルを使った業務で、「作成したファイルの保存」は作業の最後に必ず必要な部分です。

今回は、この「作成したファイルの保存」を行うための重要部分。保存先フォルダをVBAで指定する方法を説明します。

こんにちは、じゅんぱ店長(@junpa33)です。

Excel VBA 保存先フォルダをダイアログ指定で変数化

エクセルを使って業務を行う上で、VBAを使って作業スピードを上げる、

業務の効率化を図っておられる方も多いのではと思います。

VBAを使い「これでエクセルでの業務完了。この作業ファイルを保存しましょう。」という時に、

普通に「ファイル」→「名前を付けて保存」→

→(ファイル保存ダイアログを開いて)フォルダを選んで「ファイル名」を書き「保存」ボタン

になっている方も多いと思います。

折角、VBAを使っているのですから、ここは少し考えてみましょう。

たぶん、そこまで手を出さないのは、

VBAコード組みが進めないネックは、どこのフォルダに保存するか決まっていないから!

ではないでしょうか。

今回は、このお悩み解決で、

保存先フォルダをダイアログで簡単指定してさらに変数化する方法を説明します。

設定条件
  • このサンプルVBAは「book1.xlsm」に記述されています。
  • 「VBAフォルダ指定」フォルダに保存されています。
  • この「VBAフォルダ指定」フォルダには、データ保存用として
    「Data1」「Data2」「Data3」のフォルダがあります。

FileDialogオブジェクトを使いフォルダ選択ダイアログを表示

「FolderPathA」という変数に指定フォルダの絶対パス(フルパス)が代入されます。

FileDialog

FileDialogコード
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」をクリックします。

vbafolderset001b

vbafolderset002a

変数FolderPathAにパスがセットされました。

MEMO

With ~ End With の使い方はこの記事が参考になります。

vbawithstateeyecatch With~End Withの使い方。VBAコードを簡潔に記述する

Shell関数を使ってフォルダの選択ダイアログを表示します

「FolderPathB」という変数に指定フォルダの絶対パス(フルパス)が代入されます。

Shell関数

Shell関数コード
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」をクリックします。

vbafolderset003

vbafolderset004a

変数FolderPathBにパスがセットされました。

MEMO

メッセージボックスの使い方はこの記事を参考にしてください。

vbamsgboxeyecatch メッセージボックス MsgBox実際の使い方を最速に理解

保存先フォルダをダイアログ指定で変数化 まとめ

実際にVBEに記述するとこのようになります。

vbafolderset005a

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

vbafolderset006a

エクセルファイルを保存する時に、この変数を保存先ディレクトリとして指定すればOKになります。

この様に毎回、ダイアログで保存指定先を変更することで、その度に違うフォルダにファイルを保存することが出来ます。

簡単なコードですので、あなたのVBAコードに埋め込んで、利用してみてください。

短期間でエクセルVBAの独学習得を目指したいなら

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

このサイトでよく使うVBAのコードのトピックを纏めています。

エクセルVBA最速理解で必要な知識を集めよう!

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません