タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

Excel VBAでファイルダイアログの初期フォルダを設定する方法

VBA

t f B! P L

 

プログラムの画像

ExcelVBAVisual Basic for Applications)を使って、ユーザーにファイルを選択させる際に、ファイルダイアログを開いて特定のフォルダから始めたいことがあります。たとえば、「特定のフォルダを初期表示させてファイルを選びたい」と思うことがあるでしょう。この記事では、その方法を初心者向けに解説します。

 

VBAでファイルを選択するためには、Application.GetOpenFilename というメソッドを使います。しかし、GetOpenFilename は初期フォルダを直接指定できないため、別の方法を工夫する必要があります。その1つが、WScript.Shell というオブジェクトを使ってカレントディレクトリ(現在の作業フォルダ)を変更する方法です。

 

基本的な Application.GetOpenFilename の使い方

まず、ファイルを選択するための基本的なコードから見てみましょう。

 

Sub OpenFileDialog()

    Dim fileToOpen As Variant

    fileToOpen = Application.GetOpenFilename("All Files,*.*", , "ファイルを選択してください")

   

    If fileToOpen <> False Then

        MsgBox "選択されたファイル: " & fileToOpen

    Else

        MsgBox "ファイルは選択されませんでした"

    End If

End Sub

このコードを実行すると、Excelがファイルダイアログを表示し、ユーザーはファイルを選択できます。しかし、デフォルトでは、ファイルダイアログが最後にアクセスしたフォルダから始まります。ここで特定のフォルダを初期フォルダとして指定したい場合に、少し工夫が必要です。

 

WScript.Shell を使って初期フォルダを設定する

GetOpenFilename には初期フォルダを直接指定するオプションはありませんが、Excel VBAでカレントディレクトリ(作業ディレクトリ)を変更することで、ファイルダイアログを開いたときに表示されるフォルダを指定することができます。

 

VBAでカレントディレクトリを変更するためには、WScript.Shell というオブジェクトを使います。このオブジェクトを使ってカレントディレクトリを変更し、その後 GetOpenFilename を実行することで、初期フォルダを設定したように動作させることができます。

 

以下はその方法を実装した例です。

 

初期フォルダを設定するVBAコード

Sub OpenFileWithInitialDirectory()

    Dim wsh As Object

    Dim fileToOpen As Variant

   

    ' WScript.Shellオブジェクトを作成

    Set wsh = CreateObject("WScript.Shell")

   

    ' カレントディレクトリを変更(初期フォルダを設定)

    wsh.CurrentDirectory = "C:\Your\Desired\Directory" ' ここに任意のフォルダパスを設定

   

    ' ファイルダイアログを表示して、ファイルを選択

    fileToOpen = Application.GetOpenFilename("All Files,*.*", , "ファイルを選択してください")

   

    ' 選択されたファイルがある場合の処理

    If fileToOpen <> False Then

        MsgBox "選択されたファイル: " & fileToOpen

    Else

        MsgBox "ファイルは選択されませんでした"

    End If

End Sub

コードの解説

CreateObject("WScript.Shell")

ここで、WScript.Shell というオブジェクトを作成しています。このオブジェクトは、Windowsのシェル機能を使うためのもので、カレントディレクトリを変更することができます。

 

wsh.CurrentDirectory = "C:\Your\Desired\Directory"

この行で、カレントディレクトリを特定のフォルダに変更しています。例えば、"C:\Your\Desired\Directory" の部分を実際に初期表示させたいフォルダに置き換えてください。これにより、次にファイルダイアログが表示されたとき、そのフォルダが最初に開かれるようになります。

 

Application.GetOpenFilename

GetOpenFilename メソッドは、ファイルを選択するための標準的なダイアログを開きます。ここで初期フォルダとして設定したフォルダが表示されます。

 

選択されたファイルを確認

GetOpenFilename でユーザーがファイルを選択した場合、そのファイルパスが変数 fileToOpen に格納されます。選択されたファイルがあるかどうかをチェックし、メッセージボックスで選択されたファイルのパスを表示します。

 

カレントディレクトリの確認

現在のカレントディレクトリを確認したい場合は、CurDir 関数を使うことができます。たとえば、以下のコードを使うと、現在のカレントディレクトリをメッセージボックスで表示できます。

 

Sub ShowCurrentDirectory()

    MsgBox "現在のカレントディレクトリは: " & CurDir

End Sub

このようにして、カレントディレクトリがどこになっているかを確認することができます。

 

注意点

カレントディレクトリの変更は、その時点での作業ディレクトリに影響を与えますが、他のVBAコードや操作に支障をきたすことはほとんどありません。ファイルダイアログを使う場合だけでなく、ファイルを開いたり保存したりするときにも、このカレントディレクトリが影響する可能性があります。

 

GetOpenFilename でファイルを選択した後、カレントディレクトリを元に戻す必要がある場合は、選択前にカレントディレクトリを記録しておき、操作後に元のディレクトリに戻すことも可能です。

 

Dim originalDir As String

originalDir = CurDir ' 現在のディレクトリを保存

' カレントディレクトリを変更してファイルダイアログを表示

' ...

' 処理後に元のディレクトリに戻す

ChDir originalDir

まとめ

Excel VBA でファイルダイアログの初期フォルダを指定するには、WScript.Shell オブジェクトを使ってカレントディレクトリを変更する方法が簡単で実用的です。初心者でもこの方法を使えば、ファイルダイアログを表示したときに任意のフォルダからスタートできるようになります。ぜひ試してみてください!

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ