第79回.ファイル操作Ⅰ(Dir)
VBAでは、フォルダのファイル一覧を取得したりファイルの存在確認をする事が出来ます、
Dir関数は、指定したパターン(ワイルドカード)やファイル属性と一致するファイルまたはフォルダの名前を表す文字列の値を返します。
引数に指定したファイルが存在するとそのファイル名を返し、存在しないと空欄を返します。
Dir関数
pathname | 省略可能です。 ファイル名を表す文字列式を指定します。 フォルダ名およびドライブ名も含めて指定できます。 引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します。 "*"または"?" のワイルドカードを使用できます。 |
attributes | 省略可能です。 取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。 省略すると、標準ファイルの属性になります。 |
attributesの設定値
定数 | 値 | 内容 |
vbNormal | 0 | 標準ファイル |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システム ファイル。 Macintosh では使用できません。 |
vbVolume | 8 | ボリューム ラベル。この値を指定すると、すべての属性は無効になります。 Macintosh では使用できません。 |
vbDirectory | 16 | フォルダ |
vbAlias | 32 | エイリアス ファイル。 Macintosh でのみ使用できます。 |
この値はビット演算に対応するように作成されています。
10進 | 2進 |
0 | 00000000 |
1 | 00000001 |
2 | 00000010 |
4 | 00000100 |
8 | 00001000 |
16 | 00010000 |
32 | 00100000 |
64 | 01000000 |
任意の複数の値を足し算した値は、他の組み合わせと同一になることはありません。
したがって任意の組み合わせを、上記設定値の足し算で指定することが可能となっています。
この場合の足し算は論理演算のOrと同等です。
一致するファイル名がなくなると、Dir関数は長さ0の文字列 ("") を返します。
ただし、vbDirectory属性を付けてDirを呼び出しても、継続してサブディレクトリが返されることはありません。
Dir関数の使用例
Dir関数の実践例
変数 = Dir("C:\*.xls")
Do While 変数 <> ""
・・・
変数 =
Dir()
Loop
Cドライブ直下のエクセルファイルを全て取得しています。
注意
xlsで始まる拡張子全てが対象となります。
strDir = Dir(パス, vbDirectory)
Do While strDir <> ""
If strDir <> "." And strDir <> ".." Then
If GetAttr(パス & strDir) And vbDirectory Then
Debug.Print strDir 'strDirはフォルダです
End If
End If
strDir = Dir()
Loop
このVBAの解説については以下のページをお読みください。
Dir関数の制限について
・256バイトを超えるパス名が扱えない
・環境依存文字が扱えない
・特殊なネットワークドライブでエラー
等々の多くの制限があります。
Dir関数の制限について
Dir関数の関連記事
ファイル一覧を取得する(Do~LoopとDir関数)
同じテーマ「マクロVBA入門」の記事
第76回.ファイルダイアログ(FileDialog)
第77回.組み込みダイアログ(Dialogs,xlDialogPrint)
第78回.総合練習問題8
第79回.ファイル操作Ⅰ(Dir)
第80回.ファイル操作Ⅰ(その他)
第81回.総合練習問題9
第82回.RangeのResizeプロパティ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10
新着記事NEW ・・・新着記事一覧を見る
文字列のプロパティ名でオブジェクトを操作する方法|VBA技術解説(2022-12-14)
数字(1~50)を丸付き数字に変換するVBA|VBA技術解説(2022-11-15)
TEXTAFTER関数(テキストの指定文字列より後ろの部分を返す)|エクセル入門(2022-11-14)
TEXTBEFORE関数(テキストの指定文字列より前の部分を返す)|エクセル入門(2022-11-14)
TEXTSPLIT関数(列と行の区切り記号で文字列を分割)|エクセル入門(2022-11-12)
LAMBDA以降の新関数はVBAで使えるか|VBA技術解説(2022-11-11)
WRAPCOLS関数(1次元配列を指定数の列で折り返す)|エクセル入門(2022-11-08)
WRAPROWS関数(1次元配列を指定数の行で折り返す)|エクセル入門(2022-11-08)
EXPAND関数(配列を指定された行と列に拡張する)|エクセル入門(2022-11-07)
TAKE関数(配列の先頭/末尾から指定行/列数を取得)|エクセル入門(2022-11-06)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.エクセルVBAでのシート指定方法|VBA技術解説
9.マクロって何?VBAって何?|VBA入門
10.繰り返し処理(Do Loop)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。