VBA入門
ファイル操作Ⅰ(Dir)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2020-10-24

第79回.ファイル操作Ⅰ(Dir)


VBAでは、フォルダのファイル一覧を取得したりファイルの存在確認をする事が出来ます、
Dir関数は、指定したパターン(ワイルドカード)やファイル属性と一致するファイルまたはフォルダの名前を表す文字列の値を返します。
引数に指定したファイルが存在すると、そのファイル名を返し存在しないと空欄を返します。


Dir関数

Dir[(pathname[, attributes])]

pathname 省略可能です。
ファイル名を表す文字列式を指定します。
フォルダ名およびドライブ名も含めて指定できます。
引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します。
attributes 省略可能です。
取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。
省略すると、標準ファイルの属性になります。

attributesの設定値
定数 内容
vbNormal 標準ファイル
vbReadOnly 読み取り専用ファイル
vbHidden 隠しファイル
vbSystem システム ファイル。
Macintosh では使用できません。
vbVolume ボリューム ラベル。この値を指定すると、すべての属性は無効になります。
Macintosh では使用できません。
vbDirectory フォルダ
vbAlias エイリアス ファイル。
Macintosh でのみ使用できます。

複数のファイルを指定するための "*" または "?" のワイルドカードを使用できます。
フォルダ内のすべてのファイルに対して繰り返して処理を実行する場合は、
引数を指定せずにDir を実行してください。

Dir関数の使用例

変数 = Dir("C:\test.xls")
"C:\test.xls"が存在する場合は"test.xls"が、存在しない場合は""が変数に入ります。

変数 = Dir("C:\*.xls")
Cドライブ直下にある、.xlsファイルの先頭のファイル名が入ります。

変数 = Dir("C:\", vbNormal + vbReadOnly + vbHidden)
Cドライブ直下にある、.標準+読取専用+隠しファイルの先頭のファイル名が入ります。

Dir関数の実践例

変数 = Dir("C:\*.xls")
Do While 変数 <> ""
  ・・・
  変数 = Dir()
Loop

Cドライブ直下のエクセルファイルを全て取得しています。
注意
拡張子を、.xlsと指定していますが、この場合は、.xls、.xlsx、.xlsm
これら全てが対象となります。

Dir関数の制限について

Dir関数には、いくつかの制限があります。
・3桁拡張子の指定時の問題
・256バイトを超えるパス名が扱えない
・特殊なネットワークドライブでエラー
これらの問題に対する詳細な解説は、以下を参照してください。
Dir関数の制限について
Dir関数は、VBAでフォルダ・ファイルの存在確認や一覧取得において使われる関数ですが、いくつかの使用上の注意点、制限事項があります。3桁拡張子の指定時の問題 このように指定した場合、xlsxやxlsmも対象となります。3桁の拡張子を指定した場合は、4桁の拡張子も対象となります。

Dir関数の関連記事

以下の記事も参考にしてください。
ファイル一覧を取得する(Do~LoopとDir関数)
マクロVBAで他のブック(ファイル)を扱う時、まず問題となるのがファイル名です。ファイル数が常に同じでファイル名も変化しなければ良いのですが… ファイル数もファイル名も決まっていない場合は、まずはファイルの一覧を取得する必要があります。ファイル名を取得するには、Dir関数を使います。
Dir関数で全サブフォルダの全ファイルを取得
指定フォルダ以下の全サブフォルダ内の全ファイルを取得する場合、通常はFileSystemObjectの再帰モジュールで実現しますが、これをDir関数だけで、かつ、再帰ではなく二重ループで実現しています。FileSystemObjectの再帰プロシージャーについては、エクセルでファイル一覧を作成 こちらをご覧ください。



同じテーマ「マクロ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 ・・・新着記事一覧を見る

エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)
DXってなんだ? ITと何が違うの?|エクセル雑感(2021-06-24)
エクセルVBA 段級位 目安|エクセル雑感(2021-06-21)
ローカル版エクセルが「Office Scripts」に変わる日|エクセル雑感(2021-06-10)
新関数SORTBYをVBAで利用するラップ関数を作成|VBA技術解説(2021-06-12)
VBA今日のひとこと/VBA今日の教訓 on Twitter|エクセル雑感(2021-06-10)
VBAの演算子まとめ(演算子の優先順位)|VBA技術解説(2021-06-09)
画像が行列削除についてこない場合の対処|VBA技術解説(2021-06-04)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.RangeとCellsの使い方|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ