Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8703 / 13646 ツリー ←次へ | 前へ→

【31690】Dir関数でファイルが取り出される順番に規則性はあるの? ちくたく 05/11/28(月) 16:29 質問[未読]
【31692】Re:Dir関数でファイルが取り出される順番に... Blue 05/11/28(月) 16:39 回答[未読]
【31693】Re:Dir関数でファイルが取り出される順番に... だるま 05/11/28(月) 16:44 回答[未読]
【31694】Re:Dir関数でファイルが取り出される順番に... ichinose 05/11/28(月) 16:54 発言[未読]
【31696】Re:Dir関数でファイルが取り出される順番に... ちくたく 05/11/28(月) 17:31 お礼[未読]
【31708】Re:Dir関数でファイルが取り出される順番に... ichinose 05/11/29(火) 8:08 発言[未読]

【31690】Dir関数でファイルが取り出される順番に...
質問  ちくたく WEB  - 05/11/28(月) 16:29 -

引用なし
パスワード
   いつもお世話になっています。ちくたくと申します。

先日、フォルダの中にあるjpgをシート上に貼っていくマクロを作ろう
と思ったのですが、

Sub ファイルを開く順番()
  Dim myF As String
  Dim fStr As String
  
  myF = "D:\tmp"
  fStr = Dir(myF & "\", vbNormal)
  
  Do While fStr <> ""
    Debug.Print fStr
    fStr = Dir
  Loop
End Sub

というコードを用意し、テストしてみたところ
D:\tmpフォルダに入っているファイル名が
以下のような並びで出力されました

E-001.jpg
E-002.jpg
E-003.jpg
E-004.jpg
E-005.jpg
E-006.jpg
E-007.jpg
E-008.jpg
E-009.jpg
E-010.jpg
000.jpg
ScanLog1.txt
03.jpg
ScanLog.txt
00.jpg
01.jpg
02.jpg

上のE-xxx.jpgのあたりは、わかるのですが、
下の方になると、規則性が読みとれないんです。
Dir関数のファイル名取り出しには規則性があるのでしょうか?
ご存じの方、教えて頂けたら助かります。

【31692】Re:Dir関数でファイルが取り出される順番...
回答  Blue  - 05/11/28(月) 16:39 -

引用なし
パスワード
   おそらく「ディレクトリエントリ」の順番だと思われます。

【31693】Re:Dir関数でファイルが取り出される順番...
回答  だるま WEB  - 05/11/28(月) 16:44 -

引用なし
パスワード
   こんにちは ^d^

>Dir関数のファイル名取り出しには規則性があるのでしょうか?
無いと思います。

強いてあげればディレクトリに登録されている順番だと思います。(推測)

名前順とかの順番が必要なら配列に読み込んで自分でソート処理することになる
と思います。(シート上でソートでも良いでしょうけど)

【31694】Re:Dir関数でファイルが取り出される順番...
発言  ichinose  - 05/11/28(月) 16:54 -

引用なし
パスワード
   ▼ちくたく さん:
こんにちは。


>
>Sub ファイルを開く順番()
>  Dim myF As String
>  Dim fStr As String
>  
>  myF = "D:\tmp"
>  fStr = Dir(myF & "\", vbNormal)
>  
>  Do While fStr <> ""
>    Debug.Print fStr
>    fStr = Dir
>  Loop
>End Sub
>
>というコードを用意し、テストしてみたところ
>D:\tmpフォルダに入っているファイル名が
>以下のような並びで出力されました
>
>E-001.jpg
>E-002.jpg
>E-003.jpg
>E-004.jpg
>E-005.jpg
>E-006.jpg
>E-007.jpg
>E-008.jpg
>E-009.jpg
>E-010.jpg
>000.jpg
>ScanLog1.txt
>03.jpg
>ScanLog.txt
>00.jpg
>01.jpg
>02.jpg
>
>上のE-xxx.jpgのあたりは、わかるのですが、
>下の方になると、規則性が読みとれないんです。
>Dir関数のファイル名取り出しには規則性があるのでしょうか?
ファイルを作成した順番ではないですか(更新は除いて)?
フォルダの中にはDOSのときはディレクトリテーブルなんて
呼ばれていたと思いましたが、ファイル情報が格納されている
と思います。
正確な中身は忘れましたが、ファイル名、開始位置やら
終了位置、作成日・・・。
Dir関数ってこのディレクトリテーブルを順次読み込んでいるのだと
思います。

試しに
'=======================================
Sub mk_main()
  Dim idx As Long
  Do
   ans = Application.GetSaveAsFilename()
   If TypeName(ans) <> "Boolean" Then
     Open ans For Output As #1
     Print #1, "aaa"
     Close #1
     Cells(idx + 1, 1).Value = ans
     idx = idx + 1
   Else
     Exit Do
     End If
   Loop
  
End Sub

上記のコードで新規に作成したフォルダに
適当な名前を付けたファイルを複数個作成してください。

次に
'====================================================
Sub test()
  Dim flnm As String
  Dim fold As String
  fold = "D:\My Documents\TESTエリア\testarea2002\dirtest"
'      ↑ファイルを作成したフォルダ名
  flnm = Dir(fold & "\*.*")
  Do Until flnm = ""
   Cells(idx + 1, 2).Value = flnm
   idx = idx + 1
   flnm = Dir
   Loop
End Sub

なんてすると、A列とB列には同じファイル名が入ると思います。
(A列は、フルパスだけど)

確認してみてください。

【31696】Re:Dir関数でファイルが取り出される順番...
お礼  ちくたく WEB  - 05/11/28(月) 17:31 -

引用なし
パスワード
   Blue さん、 だるま さん、 ichinose さん。
こんにちは、
便宜的にichinoseさんの回答にレスをつけさせて頂きます。

回答ありがとうございました。
先に、言えば良かったのですが、作成日でないのはわかっていました。
エクスプローラ上で、作成日順でソートしたものとは配列が違いましたので
(情報を小出しにしてしまい申し訳ありません。)

Blueさんの、ディレクトリエントリでは、との言葉を受け、
一度、ファイルをゴミ箱に捨てて、もう一度フォルダに戻したところ、
それらのファイルは、後で抽出されるように変わりました。
また、Dos窓上で、Dirしたのと、同じ順でした。
(これは個人的には発見でした、今までファイルの並び順を気にしたことがなかったので)

と、いうわけで、個人的にはディレクトリエントリか、と推定しています。

さて、規則的に取り出せなかったらどうしようかなぁ、と思っていたところ、
だるまさんの配列に入れ込む等のソートのアドバイス、思いつきませんでした、
ありがとうございます。

また、ichinoseさんも、コードを提示して頂き、理解に繋がりました。

皆様、ありがとうございました。
また、継続して情報等ありましたら、よろしくお願い致します。

【31708】Re:Dir関数でファイルが取り出される順番...
発言  ichinose  - 05/11/29(火) 8:08 -

引用なし
パスワード
   おはようございます。

>先に、言えば良かったのですが、作成日でないのはわかっていました。

>ファイルを作成した順番ではないですか(更新は除いて)?
失礼しました。記述が間違っていました。
ディレクトリテーブルに登録された順序ということでした!!
後の方の記述ではそう書いておいたのですが・・・。


>エクスプローラ上で、作成日順でソートしたものとは配列が違いましたので
>(情報を小出しにしてしまい申し訳ありません。)
別のフォルダからコピーしてきた古いファイルは
エクスプローラ上のソートでは一番でも
Dir関数では最後なんて事もありえますよね?

8703 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free