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

vbafoldereyecatch

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

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

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

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

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

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

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

vbafoldersetp007

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

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

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

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

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

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

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

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

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

ではないでしょうか。

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

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

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

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

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

FileDialog
VBA
Option Explicit

Sub フォルダOpen1()
    Dim FolderPathA As String
        With Application.FileDialog(msoFileDialogFolderPicker)
'デフォルトで表示するフォルダ
            .InitialFileName = ThisWorkbook.Path & "\"
'フォルダを選択し「OK」をクリック
            If .Show = True Then
'選択したフォルダのフルパスを入手
                FolderPathA = .SelectedItems(1)
            Else
'キャンセルを選択
                MsgBox "フォルダ選択がキャンセルされました。", _
                    bExclamation
            End If
        End With
'デバッグプリント(説明用です)
    Debug.Print "FolderPathA = " & FolderPathA
End Sub

VBAコードを実行すると、このようなダイアログが表示されます。

デフォルトのダイアログ表示は、「ThisWorkbook.Path」のディレクトリになります。

フォルダを選択して「OK」をクリックします。

vbafolderset001b
vbafolderset002a

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

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

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

Shell関数
VBA
Sub フォルダOpen2()
    Dim Shell As Object
    Dim FolderPathB As String
        Set Shell = CreateObject("Shell.Application") _
            .BrowseForFolder(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にパスがセットされました。

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

vbafoldersetp008

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

vbafolderset005a

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

vbafolderset006a

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

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

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

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

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

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min