ファイルの検索・フォルダ内のファイル一覧を取得(Dir 関数)
2015/12/19
Dir 関数
Dir 関数で、ファイルの存在を確認したり、指定したフォルダ内のファイルの一覧を取得したりすることができます。
string = Dir ( [ pathname ,atribute ] )
引数・戻り値
- string ・・・ ファイルが存在する場合は、パスを除いたファイル名。存在しない場合は空文字(””)。
- pathname ・・・ 検索するファイル、フォルダを指定します。フォルダを指定した場合は、指定したフォルダ内のファイルが検索対象となります。また、複数の文字を示す * や 1 文字を示す ? をワイルドカードとして使用することもできます。初回呼び出し時に、pathname を省略するとエラーが発生します。2回め以降は、最初に指定したパスが検索対象となります。また、Dir(“”) とするとカレントフォルダが検索対象となります。
- atribute ・・・ ファイルの属性を表す定数、値を指定します。
定数
値
内容
vbNormal
0
(既定値) 属性のないファイル。
vbReadOnly
1
属性のないファイルと読み取り専用のファイル。
vbHidden
2
属性のないファイルと隠しファイル。
VbSystem
4
属性のないファイルとシステム ファイル。Macintosh では使用できません。
vbVolume
8
ボリューム ラベル。他の属性を指定した場合は、vbVolume は無視されます。Macintosh では使用できません。
vbDirectory
16
属性のないファイルとディレクトリまたはフォルダー。
vbAlias
64
指定したファイル名がエイリアスとして設定されているファイル。Macintosh でのみ使用できます。
Dir 関数は、検索条件に合致するファイルが複数存在する場合、最初に見つかったファイルを返します。次に、引数なしで、Dir 関数 を実行すると、次のファイルを返します。これを続けることで、指定したフォルダ内のすべてのファイルを取得することが可能です。
Dir 関数とワイルドカードを組み合わせて、ファイルの存在確認を確認する場合の注意
Dir(*.xls)
と指定すると、拡張子「xls」だけでなく「xlsx」や「xlsm」など「xls」を含む拡張子すべてが検索条件に一致してしまうので注意が必要です。
- string ・・・ ファイルが存在する場合は、パスを除いたファイル名。存在しない場合は空文字(””)。
- pathname ・・・ 検索するファイル、フォルダを指定します。フォルダを指定した場合は、指定したフォルダ内のファイルが検索対象となります。また、複数の文字を示す * や 1 文字を示す ? をワイルドカードとして使用することもできます。初回呼び出し時に、pathname を省略するとエラーが発生します。2回め以降は、最初に指定したパスが検索対象となります。また、Dir(“”) とするとカレントフォルダが検索対象となります。
- atribute ・・・ ファイルの属性を表す定数、値を指定します。
定数 値 内容 vbNormal 0 (既定値) 属性のないファイル。 vbReadOnly 1 属性のないファイルと読み取り専用のファイル。 vbHidden 2 属性のないファイルと隠しファイル。 VbSystem 4 属性のないファイルとシステム ファイル。Macintosh では使用できません。 vbVolume 8 ボリューム ラベル。他の属性を指定した場合は、vbVolume は無視されます。Macintosh では使用できません。 vbDirectory 16 属性のないファイルとディレクトリまたはフォルダー。 vbAlias 64 指定したファイル名がエイリアスとして設定されているファイル。Macintosh でのみ使用できます。
Dir 関数は、検索条件に合致するファイルが複数存在する場合、最初に見つかったファイルを返します。次に、引数なしで、Dir 関数 を実行すると、次のファイルを返します。これを続けることで、指定したフォルダ内のすべてのファイルを取得することが可能です。
Dir 関数とワイルドカードを組み合わせて、ファイルの存在確認を確認する場合の注意
Dir(*.xls)
と指定すると、拡張子「xls」だけでなく「xlsx」や「xlsm」など「xls」を含む拡張子すべてが検索条件に一致してしまうので注意が必要です。
Dir 関数 使用例
サンプルVBAソース 1(ファイル・フォルダの検索)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub Sample01_Dir() Dim fname1, fname2 fname1 = Dir("C:\Documents\mybook.xlsx", vbNormal) fname2 = Dir("C:\Documents\mybook0.xlsx", vbNormal) If fname1 = "" Then fname1 = "見つかりませんでした。" If fname2 = "" Then fname2 = "見つかりませんでした。" MsgBox fname1 & vbCrLf & fname2 End Sub |
実行結果 1
サンプルVBAソース 2(フルパスからファイル名を取得)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Sub Sample02_Dir() 'ファイル名・パスを取得する Dim fullfile1, fullfile2 Dim fname1, fname2, dname1, dname2 fullfile1 = "C:\Documents\mybook.xlsx" fullfile2 = "C:\Documents\mybook0.xlsx" '【ファイルが存在する場合】 'ファイル名のみを取得 fname1 = Dir(fullfile1) 'パスのみを取得(最後に「\」含む) dname1 = Replace(fullfile1, Dir(fullfile1), "") '【ファイルが存在する、しないに関係なく使用できる】 '※ FileSystemObject 使用 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") 'ファイル名のみを取得 fname2 = fso.GetFilename(fullfile2) 'パスのみを取得(最後に「\」含まない) dname2 = fso.GetParentFolderName(fullfile2) Set fso = Nothing '表示 MsgBox "fname1:" & fname1 & vbCrLf & "dname1:" & dname1 & vbCrLf & _ "fname2:" & fname2 & vbCrLf & "dname2:" & dname2 End Sub |
実行結果 2
サンプルVBAソース 3(ファイル一覧を取得)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub Sample03_Dir() Dim myFile As String, strFiles As String myFile = Dir("C:\Documents\*.xlsx") strFiles = myFile Do While myFile <> "" myFile = Dir() strFiles = strFiles & vbCrLf & myFile Loop MsgBox strFiles End Sub |
実行結果 3
関連記事
-
ファイルを削除(Kill ステートメント)
ファイルを削除する ファイルを削除するには、Kill ステートメント を使用しま …
-
テキストファイル:データを書き込む(Print # ステートメント)
Print # ステートメント Open ステートメント をシーケンシャル出力モ …
-
開いているファイルの読み取り位置または書き込み位置を設定(Seek ステートメント)
Seek ステートメント Open ステートメント で開いているファイルで、次に …
-
テキストファイル:データを読み込む(Input 関数・InputB 関数)
Input 関数・InputB 関数 Open ステートメントをシーケンシャル入 …
-
「ファイル」ダイアログボックスを表示・設定(FileDialog オブジェクト)
FileDialog オブジェクト FileDialog オブジェクト のメソッ …
-
「名前を付けて保存」ダイアログボックスを表示(GetSaveAsFilename メソッド)
GetSaveAsFilename メソッド 「名前を付けて保存」ダイアログボッ …
-
ディレクトリまたはフォルダの作成(MkDir ステートメント)
ディレクトリまたはフォルダの作成 新しいディレクトリまたはフォルダを作成するには …
-
テキストファイル:データを書き込む(Put ステートメント)
Put ステートメント Open ステートメント をランダムアクセスモード(Ra …
-
テキストファイル:データを読み込む(Line Input # ステートメント)
Line Input # ステートメント Open ステートメントをシーケンシャ …
-
「ファイルを開く」ダイアログボックス(FindFile メソッド)
FindFile メソッド 「ファイルを開く」ダイアログボックスを表示します。G …