VBAファイルを開く方法まとめ②

VBA
スポンサーリンク

FileDialog(ファイルダイアログ)について紹介していきます。

Application内のFileDialogオブジェクトを使用することで、ファイルやフォルダを選択、開く、保存するダイアログボックスを表示できます。

また、FileDialogはApplication内のオブジェクトなのでプロパティメソッドが存在します。
よって、前回記事で取り扱ったGetOpenFilenameメソッドとの大きな違いは、プロパティ・メソッドを活用して、多機能操作が可能ということになります。

GetOpenFilenameメソッドに関する記事はこちら↓

VBAファイルを開く方法まとめ①
他のファイルを開く処理としてWorkbooksコレクションのOpenメソッドとGetOpenFilenameメソッドについて紹介しています。

今回は、ファイル(フォルダ)の選択、開くを中心に解説します。

スポンサーリンク
スポンサーリンク

FileDialogの定数

FileDialogオブジェクトを使って4種類のダイアログを表示させることができます。

msoFileDialogFilePickerユーザーがファイルを選択できます。
msoFileDialogFolderPickerユーザーがフォルダーを選択できます。
msoFileDialogOpenユーザーがファイルを開くことができます。
msoFileDialogSaveAsユーザーがファイルを保存できます。
ファイルダイアログの種類

下図のようなファイルを取り扱うためのダイアログボックスが表示されます。

スポンサーリンク

プロパティ・メソッド

主要なプロパティ・メソッドです。

プロパティ名詳細
InitialFileNameダイアログボックスに最初に表示されるパスまたはファイル名を指定します。
msoFileDialogSaveAs」の場合はファイル名になります。
Filtersファイルを選択・開く場合に、選択できるファイルの拡張子を限定できます。
【書き方】
単一の拡張子表示:filters.Add “任意の文字列”,”ファイル拡張子”
複数の拡張子表示:filters.Add “任意の文字列”,”1つ目拡張子;2つ目拡張子”

上記のように、文字列と拡張子を”(ダブルクォーテーション)で囲み、,(カンマ)で区切ります。
※複数の場合は、1つ目と2つ目の拡張子の間にセミコロンをはさみます。
AllowMultiSelectTrueを設定すると、複数ファイルを選択できます。
Titleダイアログボックスのタイトルを設定します。
SelectedItemsFileDialogSelectedItems コレクションを取得します。 このコレクションには、FileDialog オブジェクトの Show メソッドによって表示されたファイルのダイアログ ボックスでユーザーが選択したファイルのパスの一覧が含まれます。
※コレクションとは・・同じ種類のオブジェクトをまとめたもの
プロパティ
メソッド名   詳細
Executeファイルダイアログで[開く]や[保存]などユーザーが選択したアクションが実行されます。
Show[ファイル] ダイアログ ボックスを表示し、ユーザーが [アクション] ボタン (-1) を押したのか、または [キャンセル] ボタン (0) 押したのかを示す長整数型 (Long) の値を返します。  Show メソッドを呼び出すと、ユーザーが [ファイル] ダイアログ ボックスを閉じるまでコードの実行は停止します。 [開く] と [名前を付けて保存] ダイアログ ボックスの場合、ユーザーのアクションを実行するには Show メソッドの直後に Execute メソッドを使用します。
メソッド
スポンサーリンク

msoFileDialogFilePicker

「msoFileDialogFilePicker」任意のファイルを選択して、ファイルパスを取得できます。

上記のプロパティ、メソッドを使って下記のコードを実行してみます。

1つのファイルを選択する

下記コードにて、ダイアログボックスから任意のExcelファイルを選択して、メッセージボックスでファイルパスを表示させます。

Sub ファイルを選択()
    With Application.FileDialog(msoFileDialogFilePicker)
        .InitialFileName = "D:"
        .Filters.Clear
        .Filters.Add "すべてのExcelファイル", "*.xlsx;*.xlsm"
        .AllowMultiSelect = False
        .Title = "えくせるふぁいるの選択"
        If .Show = True Then
            MsgBox .SelectedItems(1)
        End If
    End With
End Sub

上記コード中のWith構文についての解説はこちら↓

10日で習得!VBA入門④-メソッド、With構文-
VBAの基本なるメソッド、セルやセル範囲の書き方、Withステートメントについて紹介しています。 記事を読み進めていくことで、マクロVBAを使って同一シート内のデータ処理を自動化するために必要なVBAスキルを習得できます。VBA初学者が添付のレジュメを使って一緒に手を動かしながらVBAコードを記述していくことで、自分のペースでじっくり確実に習得することができます。

If .Show = True Then

Showメソッドにて、ファイル選択のダイアログボックスが表示されます。


.InitialFileName = "D:"
.Filters.Add "すべてのExcelファイル", "*.xlsx;*.xlsm"
.Title = "えくせるふぁいるの選択"

上記、プロパティにて、Dドライブの表示とダイアログボックスのタイトル「えくせるふぁいるの選択」になります。

また、Filtersメソッドにて、拡張子xlsxとxlsmが限定表示されます。


MsgBox .SelectedItems(1)

選択したファイルパス(FileDialogSelectedItems コレクションの1つ)がメッセージボックスで表示されます。

これらについて、定数をmsoFileDialogFolderPickerとすればフォルダの選択になります。

複数のファイルを選択する

今度は下記のコードで複数ファイルを選択して、ファイルの開く、閉じるを繰り返します。

Sub 複数ファイル選択()
    Dim i As Long
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Filters.Clear
        .Filters.Add "ふくすう", "*.xlsm;*.xlsx"
        If .Show = True Then
            For i = 1 To .SelectedItems.Count
                Workbooks.Open .SelectedItems(i)
                Workbooks(Workbooks.Count).Close False
            Next i
        End If
    End With
End Sub

Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = True

AllowMultiSelectTrueに設定することで、複数ファイルの選択が可能になります。


For i = 1 To .SelectedItems.Count
      Workbooks.Open .SelectedItems(i)
      Workbooks(Workbooks.Count).Close False
Next i

FileDialogSelectedItems コレクションのCountプロパティでコレクションの数を返します。

つまり、SelectedItems.Countは選択したファイルの個数です。

そして、For文を使って選択したファイルの個数分ループさせて、ファイルを開き、そして閉じる動作を繰り返します。

For文(For~Nextステーメント)の解説はこちら

Openメソッド(ワークブックを開く動作)についての解説はこちら↓

VBAファイルを開く方法まとめ①
他のファイルを開く処理としてWorkbooksコレクションのOpenメソッドとGetOpenFilenameメソッドについて紹介しています。

上記コードでは、保存しないで閉じる処理Workbooks(Workbooks.Count).Close Falseですが、保存する場合の処理についての解説はこちら↓

ExcelVBAでのファイル保存
VBAにおけるファイルの保存方法についてまとめてみました。同じファイル名があった場合に名前に連番を付けて保存する方法も紹介しています。
スポンサーリンク

msoFileDialogOpen

「msoFileDialogOpen」で任意のファイルを開きます。

msoFileDialogFilePickermsoFileDialogFolderPickerとの明確な違いは、ダイアログボックスで「開く」ボタンを押せば、Executeメソッドで開く仕組みです。

msoFileDialogFilePickermsoFileDialogFolderPickerの場合、あくまで選択するだけの定数なので、コード上でOpenメソッドの記述が必要です。)

「開く」ボタン
Sub ファイルを開く()
    With Application.FileDialog(msoFileDialogOpen)
            .Filters.Clear
            .Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm"
            .InitialFileName = "C:"
         If .Show = True Then
            .Execute
         End If
    End With
End Sub


.Filters.Clear
.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm"
.InitialFileName = "C:"

先述の解説と同様、InitialFileNameでCドライブを初期表示させます。

Filtersメソッドにて、拡張子xlsxとxlsmが限定表示されます。

.Execute

Executeメソッドは、ユーザーが行ったアクションが実行されます。

つまり、ユーザーがダイアログボックスでファイルを選択して、「開く」ボタンを押すアクションがExecuteメソッドで実行されます。

筆者オススメのVBAの本はこちら↓

ExcelVBA学習のおすすめの本5選
筆者オススメの「これは秀逸!」「これは1冊持っとくべき」と思えるExcelVBAの本を紹介しています。ExcelVBAの書籍選びで、どれを選んでよいか迷っておられる方に参考にしていただきたいです。
スポンサーリンク

msoFileDialogSaveAs

「msoFileDialogSaveAs」で、任意のファイル名で名前を付けて保存します。

Sub ファイルを保存()
    With Application.FileDialog(msoFileDialogSaveAs)
        If .Show = False Then
            Exit Sub
        End If
        .Execute
    End With
End Sub

出現するダイアログボックスのボタンは「保存」です。

スポンサーリンク

まとめ

今回はファイルを開く処理として、Application内のFileDialogオブジェクトmsoFileDialogFilePickermsoFileDialogOpenを中心に紹介しました。

ポイントは以下の通りです。

1,ユーザーにファイル選択等を委ねることができる

2,プロパティ、メソッドを使って操作できる

是非、参考にしてみてください。

コメント

タイトルとURLをコピーしました