Dir関数は指定したファイルやフォルダの名前を返してくれますが、
返す名前が複数あるとき、
「どんな順番で返すか」知っていますか??
エクスプローラーに並んでいる順番だと思って実装してしまうと、
困ったことになるときがあります。
Dir関数の戻り値の順番にはルールがある
例えば「C:\フォルダ」内に、次の3つのファイルがあるとします。
ファイル1.xlsx 保存時刻[1:33]
ファイル2.xlsx 保存時刻[1:32]
ファイル3.xlsx 保存時刻[1:31]
ファイル2.xlsx 保存時刻[1:32]
ファイル3.xlsx 保存時刻[1:31]
このフォルダに対して、こんなコードを実行してみます。
Dim 変数1 As String
Dim 変数2 As String
Dim 変数3 As String
変数1 = Dir(“C:\フォルダ\*”)
変数2 = Dir()
変数3 = Dir()
Dim 変数2 As String
Dim 変数3 As String
変数1 = Dir(“C:\フォルダ\*”)
変数2 = Dir()
変数3 = Dir()
変数2と変数3は「Dir()」となっています。
これは、直前のDirつまり変数1と同じ条件でファイルを取得するという意味です。
つまり、「C:\フォルダ」内にあるファイルを3つ順番にとるコードです。
ファイルシステム「NTFS」の場合
いざ実行してみます。
こんな結果になりました。
変数1=ファイル1.xlsx
変数2=ファイル2.xlsx
変数3=ファイル3.xlsx
変数2=ファイル2.xlsx
変数3=ファイル3.xlsx
ファイル名の昇順に取れていることが分かります。
実はDir関数、
指定したフォルダのファイルシステムによって、取ってくる順番が変わってきます。
今回の「C:\フォルダ」は「NTFS」というファイルシステムでした。
「NTFS」の場合、ファイル名の昇順に取ってきます。
ファイルシステム「FTS」の場合
次は、フォルダを「C」から「D」に変えて実行してみます。
すると、こんな結果になりました。
変数1=ファイル3.xlsx
変数2=ファイル2.xlsx
変数3=ファイル1.xlsx
変数2=ファイル2.xlsx
変数3=ファイル1.xlsx
さっきとは違い、保存時刻が早い順に取れていることが分かります。
今度の「D」フォルダ(ドライブ)は「FTS」というファイルシステムでした。
「FTS」の場合、保存時刻が早い順に取ってくるようです。
Windowsの場合ほとんどのディスクが「NTFS」
何だかややこしいですが、
Windowsの場合ほとんどのディスクが「NTFS」です。
なので、
だいたいは「ファイル名の昇順」に返ってくる、と思っていてよいと思います。
もちろん、順番が大切な処理の場合はちゃんと気にしてくださいね。