VBAでファイル選択ダイヤログを出力し選択したファイルを操作する方法 | システムエンジニアライフ

VBAでファイル選択ダイヤログを出力し選択したファイルを操作する方法

ヘッダー広告
スポンサードリンク


EXCELやACCESSのVBAを使用して他のファイルを操作するというのは、結構な頻度で使用すると思います。
決まったフォルダに決まったファイル名で処理対象のファイルが保存してあれば、VBAのプログラムとしては簡単に実現することが可能です。
しかし、ファイルの保存場所やファイル名が固定ではない場合には、都度ファイルを選択するような処理を追加してファイルの処理をする必要があります。

そこで今回は、VBAを使用してファイル選択ダイヤログを出力して選択したファイルを操作する方法の中から、私がよく使用する1つをご紹介いたします。

ファイル選択ダイヤログを表示してファイルを選択させるVBA


プログラム


早速ファイル選択ダイヤログを表示してファイル処理を行うVBAをご紹介いたします。
まずは以下のプログラムをご覧ください。

Option Explicit


Private Const MAIN_SHEETNAME = "Sheet1"
Private Const DEFAULT_DIR_RANGE = "B1"

Public Sub FileSelect()
  
    Dim FileDia As FileDialog
    Dim DefaultDirPath As String
    Dim FilePath As Variant
    Dim FileCount As Long
    Dim i As Long
    
    Const FILE_EXTENSTIONS As String = "Text Files (*.csv)"  '
    Const FILE_TYPE As String = "*.csv"
    Const MSG_TITLE As String = "取込対象ファイルを選択して下さい"
    
    Application.ScreenUpdating = False
    
    '初期表示フォルダが存在するかチェック
    DefaultDirPath = ThisWorkbook.Worksheets(MAIN_SHEETNAME).Range(DEFAULT_DIR_RANGE).Value
    
    '設定されている初期表示フォルダが存在しないフォルダの場合には、空白にする。
    If Trim(DefaultDirPath) <> "" Then
        If Dir(DefaultDirPath, vbDirectory) = "" Then
            DefaultDirPath = ""
        End If
    End If
    
    '取込ファイル選択
    Set FileDia = Application.FileDialog(msoFileDialogFilePicker)
       
    With FileDia
        .Title = MSG_TITLE
        
        'FileDialogFiltersコレクションの設定
        .Filters.Clear
        .Filters.Add FILE_EXTENSTIONS, FILE_TYPE
        .FilterIndex = 1
            
        .InitialView = msoFileDialogViewDetails '詳細なファイル情報をリストで表示する
        .InitialFileName = DefaultDirPath  '初期表示フォルダを設定
        .AllowMultiSelect = True  '複数ファイルを選択可能
    
        If .Show = -1 Then
            
            '選択したファイル数分処理する
            FileCount = .SelectedItems.Count
            For i = 1 To FileCount
                
                Application.ScreenUpdating = True
                Application.ScreenUpdating = False
                Application.StatusBar = i & "/" & FileCount & "ファイルを取込中です。"
                
                FilePath = .SelectedItems(i)
                
                '本来はここにファイル操作処理を記載する。
                Debug.Print "ファイル名:" & FilePath
                
            Next i
    
        Else
            Application.ScreenUpdating = True
            MsgBox "処理を中断します。", vbInformation, "処理中断"
            Exit Sub
        End If
    End With
  
    Set FileDia = Nothing
    
    Application.StatusBar = False
    Application.ScreenUpdating = True
    
    MsgBox "ファイル操作処理が完了しました。", vbInformation, "ファイル選択完了"

End Sub


プログラムの解説


ご紹介させていただいたプログラムは、まずB1セルに設定してあるフォルダがデフォルト表示されているファイル選択ダイヤログが出力されます。
ファイル選択ダイヤログでは、CSVファイルが選択可能となります。
ここはプログラム上で他の拡張子ファイルへ簡単に変更が可能です。
また、シフトキーやコントロールキーを押しながら複数ファイルが同時に選択可能となっています。
ファイル選択し、「開く」をクリックすると、選択したファイル一つ一つに対して処理することが可能となります。

今回は省略しましたが、
‘本来はここにファイル操作処理を記載する。
Debug.Print “ファイル名:” & FilePath

ここにサブプロシージャの呼び出し処理を追加すれば、プログラムも綺麗に記載することが可能です。

もしファイルを選択せずに「キャンセル」をクリックした場合には、処理中断メッセージを出力してプログラムを中断します。

FileDialogオブジェクトの各プロパティ紹介


簡単にFileDialogオブジェクトのプロパティについて紹介致します。

  • Titleプロパティ
これはそのままですね。ファイル選択ダイヤログのタイトルを設定することが可能です。 今回紹介したプログラムでは、MSG_TITLEという定数を準備して、タイトルを設定しています。 この定数の値を変更することでタイトルの変更が可能です。
  • Filtersプロパティ
このプロパティは、ファイル選択ダイヤログで選択可能な拡張子フィルターを設定することが可能です。
今回のプログラムでは、FILE_EXTENSTIONS、FILE_TYPEの2つの定数で対象ファイル形式を設定しています。
以下のように設定することで、複数のファイル形式も設定可能となります。
.Filters.Add “Images”, “*.gif; *.jpg; *.jpeg”, 1


  • InitialViewプロパティ
このプロパティは、ファイル選択ダイヤログでのファイルやフォルダの表示方法を設定することが可能です。
今回してしている「msoFileDialogViewDetails」は、リスト形式で詳細な情報をファイル選択ダイヤログに表示します。
エクスプローラーでの表示方法と同じように選択可能です。

  • InitialFileNameプロパティ
このプロパティは、ファイル選択ダイヤログで初期表示するフォルダを設定することが可能です。
ここを設定しないと使い勝手が悪くなってしまうので、できれば設定することをおすすめします。

  • AllowMultiSelectプロパティ
このプロパティは、ファイル選択ダイヤログにて、複数ファイルの選択が可能かどうかを設定します。
複数ファイルを選択可能とするには、このプロパティにTrueをセットすることで対応可能です。



以上がVBAでファイル選択ダイヤログを表示させて、選択したファイルに対して処理する方法となります。
VBAで開発を行っている人であれば、よく使う機能だと思いますので、参考にしていただき、開発する際に役立てていただければ幸いです。
フッター広告

スポンサードリンク



シェアする

  • このエントリーをはてなブックマークに追加

フォローする