Dir 関数
指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列型 (String) の値を返します。ドライブのボリューム ラベルも取得できます。
-
構文
- Dir[(pathname[, attributes])]
- Dir 関数の構文は、次の指定項目から構成されます。
-
指定項目 内容
-
pathname
- 省略可能です。ファイル名を表す文字列式を指定します。フォルダ名およびドライブ名も含めて指定できます。引数 pathname に指定した内容が見つからないときは、長さ
0 の文字列 (" ") を返します。
-
attributes
- 省略可能です。取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。省略すると、標準ファイルの属性になります。
-
設定値
-
引数
attributes の設定値は次のとおりです。
-
定数 |
値 |
内容 |
vbNormal |
0 |
標準ファイル |
vbReadOnly |
1 |
読み取り専用ファイル |
vbHidden |
2 |
隠しファイル |
vbSystem |
4 |
システム ファイル。Macintosh では使用できません。 |
vbVolume |
8 |
ボリューム ラベル。この値を指定すると、すべての属性は無効になります。Macintosh では使用できません。 |
vbDirectory |
16 |
フォルダ |
vbAlias |
64 |
エイリアス ファイル。Macintosh でのみ使用できます。 |
-
メモ
- これらの定数は、Visual Basic で定義されています。したがって、実際の数値の代わりにコードで使用することができます。
-
解説
-
Windows の場合
、複数のファイルを指定するための "*" (アスタリスク) および "?" (疑問符) のワイルドカード文字を使用できます。Macintosh
の場合、これらの文字は有効なファイル名の文字として扱われるため、このワイルドカード文字を使用して複数ファイルを指定することはできません。
-
また、Macintosh で
ワイルドカード文字がサポートされていないため、ファイルの種類によって複数のファイルを識別することができません。特定の種類のファイルを指定するには、ファイル名を使用せずに
MacID 関数を使用します。例えば、次の例では、最初に見つかった、タイプが TEXT のファイルを返します。
- Dir("SomePath", MacID("TEXT"))
-
フォルダ内のすべてのファイルに対して繰り返して処理を実行
する場合は、引数を指定せずにDir を実行してください。
- Dir("")
-
Windows で MacID 関数と Dir 関数を組み合わせて使用した場合
はエラーが発生します。
-
引数 attribute に
256 より大きな値を指定した場合は MacID 関数の値と見なされます。
-
Dir 関数を最初に呼び出すとき
、引数 pathname を指定しないとエラーになります。またファイル属性 (引数 attributes) を指定する場合にも、引数 pathname
を指定する必要があります。
-
Dir 関数は、引数 pathname と
一致する最初のファイル名を返します。それ以外のファイル名で引数 pathname と一致するファイル名を取得するには、引数を指定せずに再び
Dir 関数を呼び出してください。一致するファイル名がない場合は、Dir 関数は長さ 0 の文字列を返します。長さ 0 の文字列が返された場合は、次に
Dir 関数を呼び出すときに引数 pathname を再び指定しなければなりません。指定しないとエラーが発生します。現在の引数 pathname
と一致するファイル名をすべて取得していなくても、途中で引数 pathname の指定を変更できます。ただし、Dir 関数を再帰的に呼び出すことはできません。vbDirectory
属性を指定して Dir 関数を続けて呼び出しても、連続する下位レベルのサブフォルダは返しません。
-
ヒント
- 取得したファイルを整理する必要があるときには、ファイル名を配列に格納して並べ替え (ソート) を行ってください。
|
Dir 関数の使用例
次の例は、Dir 関数を使って、指定したファイルまたはフォルダがあるかどうかを確認します。Macintosh, の場合、既定のドライブ名は
“HD:” で、パスの区切り文字には円記号 ("\") ではなくコロン (":") を使用してフォルダを指定します。また、ワイルドカード文字は、Mac
のフォルダ指定では使用できませんが、MacID 関数を使用すると複数のファイルを指定することができます。 |
Option Explicit
Dim MyFile, MyPath, MyName
' "WIN.INI" が存在する場合、そのファイル名を返します(Microsoft Windows の場合)。
MyFile = Dir("C:\WINDOWS\WIN.INI")
' 指定した拡張子を持つファイル名を返します。複数の *.INI ファイル
' が存在すると、最初に見つかったファイル名を返します。
MyFile = Dir("C:\WINDOWS\*.INI")
' 引数を指定せずに再度 Dir 関数を呼び出すと、
' 同じフォルダにある次の *.INIファイルを返します。
MyFile = Dir
' 隠しファイル属性を持つ *.TXT ファイルであり、最初に見つかったファイル名を返します。
MyFile = Dir("*.TXT", vbHidden)
' C:\ 内のフォルダの名前を表示します。
MyPath = "c:\" ' パスを設定します。
MyName = Dir(MyPath, vbDirectory) ' 最初のフォルダ名を返します。
Do While MyName <> "" ' ループを開始します。
' 現在のフォルダと親フォルダは無視します。
If MyName <> "." And MyName <> ".." Then
' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' フォルダであれば、それを表示します。
End If
End If
MyName = Dir ' 次のフォルダ名を返します。
Loop
|
|