• ベストアンサー

Files コレクションの順序

エクセルVBAですが 特定のフォルダ内の全ファイル名を取得するのにFiles コレクションが使えると思います。 このFilesコレクションに入るデータの順序を、日付順でソート出来るでしょうか? コマンドラインでいうと、Dir /OD に相当する動作だと思うのですが・・・ 一般的に取得したあとfor each ~で処理すると思うのですが。 日付の古いファイルから呼び出して処理をしたいのです。 ですので、コレクションから呼び出す段階で日付の古い順から呼び出す方法でも構いません。 どなたか教えて頂けないでしょうか。

noname#171966
noname#171966

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

エクセルVBAなのであれば、Worksheetに書き出してソートするのが簡単かと思います。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060120/227645/ >コマンドラインでいうと、Dir /OD に相当する動作だと思うのですが・・・ これをそのまま使う方針でいいなら Dim v() As String v = Split(CreateObject("WScript.Shell").Exec("%ComSpec% /c dir ""c:\temp"" /a-d/b/od/tw").StdOut.ReadAll, vbCrLf) Stop コマンドプロンプト表示が気になるなら Const wrk = "c:\out.txt" '出力用。既存ファイルに注意 Dim v() As String CreateObject("WScript.Shell").Run "%ComSpec% /c dir ""c:\temp"" /a-d/b/od/tw>" & wrk, 0, True Open wrk For Input As #1 v = Split(StrConv(InputB(LOF(1), #1), vbUnicode), vbCrLf) Close #1 'Kill wrk '必要に応じ Stop

noname#171966
質問者

お礼

ありがとうございます。 エクセルのセルは使用せずマクロ内だけで回したかったので、 ご提示の方法は私は使用しませんでした。 しかしコマンドラインのこの利用方法は参考になります。 ありがとうございました。

その他の回答 (1)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

回答では在りませんが 私も同じような処理の必要があったのですが、調べてもわからなかったので、力任せに自分で全部のファイルの作成日を配列に入れて自分でソートしてから処理しました。

noname#171966
質問者

お礼

ありがとうございます。 私も結局力業でプログラムを書いてしまいました。 面倒なのでバブルソートですが。

関連するQ&A

  • コマンドプロンプト dir でのソート

    Windows7のコマンドプロンプトにてdirコマンドでのソートについて教えてください。 ソートするファイルはデジカメ写真群(jpeg形式)です。 ファイルが入ったフォルダでプロパティを見ると「日付時刻」「撮影日時」「アクセス日時」 「作成日時」「更新日時」があります。 推測ですが、写真を回転し保存したりして「更新日時」が変わっているのでは…と思って います。 複数のデジカメで撮った写真を撮影日時の順でソートしたくて dir/od と打つとどうやら 「撮影日時」のソートではなく「更新日時」でソートされている模様。 「撮影日時」でソートさせるにはどんなコマンドを打てばいいでしょうか? あるいはdirコマンドで「撮影日時」の情報も拾えればいいのですが....。 数百枚の写真を効率よく「撮影日時」でソートしたいです。 よろしくお願いします。 やりたいのは、リダイレクトした結果を元にファイル名を撮影日時順にナンバリングしたい のです。(意味通じます?)

  • VBA フォルダ内のファイルを、ファイル名順に開く

    【PPT VBA】フォルダ内のファイルを、ファイル名順に開く方法について  今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境:Win7+PPT2007 になります。  下記のようなコードで、あるフォルダ内のファイル群のデータを取得しております。 「ファイル名順」でデータを取り出したいのですが、違う順(おそらく日時順)で 出てくるので悩んでいる次第でございます。  検索いたしておりますと、ハードディスク等の環境によって検出順が異なるようでございましたが 何か、良さそうな方法がございましたらお教えいただきたくお願いいたします。 Dim File_Collection As Object Dim File_List As Variant Dim Folder_Collection As Object Dim Folder_List As Variant Set File_Collection = CreateObject("Scripting.FileSystemObject") _ .GetFolder(パス).Files For Each File_List In File_Collection      '(名前順では検出してくれません。。。) Next  暫く考えまして、例えば Stringの配列を用意しておいて一旦、上記コードでファイル名とパスをリスト化 →配列の文字列を登り順に、Sort →これの順にファイルを開いていく などという事を思いつきました。しかしファイル数が多いため(100~500個でございます)、 これらの長いパスを配列に入れるというのも、メモリに負担がかかる(?)のかな などと考えている次第でございます。  他に、配列の代わりにエクセルを一旦開いて、そこでソート・・・・・とも考えましたが 友人達に使っていただく可能性があり、余りスマートな解決策ではなさそうですので それよりは上記の「配列でソート」を優先したい次第でございます。  コーディングで何か良い方法があれば良いのでございますが、 他の方法でも結構でございます。もし「自分なら、こうするかな」といった ようなご意見などございましたら是非、ご紹介いただけないでしょうか。  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • grepとsort

    my $files = readdir(DIR); @files = grep { !/^\.\.?$/; } @files; 「.」と「..」の除去 @files = sort { $a cmp $b; } @files; ファイル名のソート この2文についてですが、grepとsortに関する文法がよくわかりません。 grepって、除去するコマンドなんでしょうか? sortでは、$a cmp $bが何を意味しているのでしょうか。

    • ベストアンサー
    • Perl
  • フォルダ内のファイル名取得の仕方が分かりません

    Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • GCCにてディレクトリ・ファイル操作等のできるPGを作成したい。

    GCCコンパイラを使い、UNIX上のディレクトリ・ファイルの操作 また、各ファイルシステムの総容量・空容量等の確認を行いたいと思っ ているのですが、以下の処理を実行する関数を見つけることができませ んでした。 ----------------------------------------------------------------------------- ディレクトリの移動                  (chdir コマンド相当) ディレクトリ内のファイル・サブディレクトリ一覧の取得 (dir/ls コマンド相当) ファイル日付の取得                  (ls -l コマンド相当) ディスク空き容量等確認                 (df -k コマンド相当) ファイルの削除                    (rm  コマンド相当) ----------------------------------------------------------------------------- もし、ご存知の方がいらっいましたら、教えて頂きたく存じます。 また、GCCを使ったUNIXシステム管理プログラミングについて、解説されている 書籍・サイト等を御存知でしたら教えていただきたく思います。

  • Temporary Internet Files内のクッキーの削除

    C:\Documents and Settings\USERNAME\Local Settings \Temporary Internet Files内のクッキーのファイルを削除するbatファイルを作成したいです。 しかし、Temporary Internet Filesでdirコマンドを実行してもクッキーファイルが存在しません。 キックするbatファイルには、どのようなコマンドを記述すればクッキーファイルが削除できますでしょうか?

  • Temporary Internet Files内のクッキーの削除

    C:\Documents and Settings\USERNAME\Local Settings \Temporary Internet Files内に クッキー(*.txt)が作成されたらすぐ削除するようなbatファイルは作成可能でしょうか? 1秒毎くらいにファイルが存在したら、消し続けるというものでもいいのですが、 Temporary Internet Filesでdirコマンドを実行してもクッキーファイルが 存在しません。

  • 【Linux】findコマンドの表示順

    linuxのfindコマンドについて質問です。 例えば、あるディレクトリの構成が以下の通りだったとします。 /dir1/aaa.txt /dir1/zzz.txt /dir1/dir2/bbb.txt このとき、 find *.txt | sort を行うと /dir1/aaa.txt /dir1/dir2/bbb.txt /dir1/zzz.txt という順に表示されます。 (文字としてはソートされていますが、ディレクトリ構造としては滅茶苦茶です。) しかし、ファイル名を表示する際は通常はディレクトリ毎に表示したいため、 1つ目の例の順のように表示される必要があります。 このとき、どのようにすればfindによる検索結果を1つ目のようにディレクトリ順に表示できるのでしょうか。 実際はディレクトリ構成が複雑で、ファイルもディレクトリも非常に多くあります。

  • 【VBA】for each文でListbox値取得

    VBA7.1でfor each文を使い、Listbox(Lst1)の全ての値を 取得したいと思っています。 For Each 変数 In コレクションや配列 のコレクションや配列には何を指定したらよいでしょうか。 よろしくお願いいたします

  • treeコマンドでソートできませんか?

     コマンドプロンプトのtreeコマンドで、ディレクトリ名順、ファイル順にソートして出力することはできますか?  “| sort”を使ってみましたが、どうもうまくできませんでしたので。よろしくお願いします。

専門家に質問してみよう