【ExcelVBA】Dir関数の戻り値の順番はファイルシステムによって違う

ExcelVBA
記事内に広告が含まれています。

Dir関数は指定したファイルやフォルダの名前を返してくれますが、

返す名前が複数あるとき、

「どんな順番で返すか」知っていますか??

エクスプローラーに並んでいる順番だと思って実装してしまうと、

困ったことになるときがあります。

Dir関数の戻り値の順番にはルールがある

例えば「C:\フォルダ」内に、次の3つのファイルがあるとします。

ファイル1.xlsx 保存時刻[1:33]
ファイル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()

変数2と変数3は「Dir()」となっています。

これは、直前のDirつまり変数1と同じ条件でファイルを取得するという意味です。

つまり、「C:\フォルダ」内にあるファイルを3つ順番にとるコードです。

ファイルシステム「NTFS」の場合

いざ実行してみます。

こんな結果になりました。

変数1=ファイル1.xlsx
変数2=ファイル2.xlsx
変数3=ファイル3.xlsx

ファイル名の昇順に取れていることが分かります。

実はDir関数、

指定したフォルダのファイルシステムによって、取ってくる順番が変わってきます。

今回の「C:\フォルダ」は「NTFS」というファイルシステムでした。

「NTFS」の場合、ファイル名の昇順に取ってきます。

ファイルシステム「FTS」の場合

次は、フォルダを「C」から「D」に変えて実行してみます。

すると、こんな結果になりました。

変数1=ファイル3.xlsx
変数2=ファイル2.xlsx
変数3=ファイル1.xlsx

さっきとは違い、保存時刻が早い順に取れていることが分かります。

今度の「D」フォルダ(ドライブ)は「FTS」というファイルシステムでした。

「FTS」の場合、保存時刻が早い順に取ってくるようです。

Windowsの場合ほとんどのディスクが「NTFS」

何だかややこしいですが、

Windowsの場合ほとんどのディスクが「NTFS」です。

なので、

だいたいは「ファイル名の昇順」に返ってくる、と思っていてよいと思います。

もちろん、順番が大切な処理の場合はちゃんと気にしてくださいね。

サイト運営者
もぐらっとん

シスエムエンジニア歴15年。フリーランスになって2年。家庭と両立するため在宅で仕事をしています。
RPA(Uipath)開発・運用と、ブログ運営(Wordpress)をしています。
※当ブログとは別に、主婦ブログも運営しています
https://syufumesen.com/

もぐらっとんをフォローする
ExcelVBA
シェアする
もぐらっとんをフォローする
もぐらっとんWEB
タイトルとURLをコピーしました