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

ExcelVBA

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

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

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

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

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

サイト運営者
momo

知識ゼロから正社員→派遣→フリーランスになった関西出身の40代女ITエンジニア。エンジニアの世界を女性視点で本音で語ります。関西弁がちょっと強め。

momoをフォローする
003_midworks_img_300x250

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」です。

なので、

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

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

既にフリーランスで今の案件に不満がある人も、今からフリーランスを目指す人も、エージェントを利用すれば年収600万も夢じゃありません。
難しい契約や交渉はエージェントにお任せ。1人で仕事を探すより、圧倒的に早く仕事が見つかります。
登録は無料で、その後の無料面談では自分の市場価値や将来性も確認できます。

ExcelVBA
momoをフォローする
タイトルとURLをコピーしました