• 締切済み

複数の条件に合致したファイルリストの作成方法を教えて下さい。

複数の条件に合致したファイルリストの作成方法で 困っております。 Windows上のある場所に、 Directory0828  html  ┗A   ┗File001   ┗File002   ┗File003   ┗File005  ┗B   ┗File001   ┗File002   ┗File004   ┗File006  ┗C   ┗File001   ┗File003   ┗File004  img  ┗A   ┗File011   ┗File012   ┗File013   ┗File015  ┗B   ┗File011   ┗File012   ┗File014   ┗File016  ┗C   ┗File011   ┗File013   ┗File014 というディレクトリ構造とファイル群があるとします。 ※ディレクトリ名"html""img""A""B""C"は固定 ※ディレクトリは増減なし。  すなわち、第二階層はhtml,imgの2つで固定  第三階層は、それぞれに対してA,B,Cの3つで固定 ※ファイル名は、数、拡張子を含めて可変 上記を、 --------------------------------------------------- ----------- File List "Directory0828" ------------- --------------------------------------------------- 【html】 条件1)A,B,Cに全て存在するファイル名 File001 条件2)A,Bにのみ存在するファイル名 File001 File002 条件3)A,Cにのみ存在するファイル名 File001 File003 条件4)B,Cにのみ存在するファイル名 File001 File004 条件5)Aにのみ存在するファイル名 File005 条件6)Bにのみ存在するファイル名 File006 条件7)Cにのみ存在するファイル名 なし 【img】 条件1)A,B,Cに全て存在するファイル名 File011 条件2)A,Bにのみ存在するファイル名 File011 File012 条件3)A,Cにのみ存在するファイル名 File011 File013 条件4)B,Cにのみ存在するファイル名 File011 File014 条件5)Aにのみ存在するファイル名 File015 条件6)Bにのみ存在するファイル名 File016 条件7)Cにのみ存在するファイル名 なし --------------------------------------------------- という形式で Directory0828_filelist.txt という名前で作成したいのです。 上記を、プログラムの全くわからないオペレータでも 何らかの操作でミスなく行えるようにしたいのです。 ファイルリスト作成のフリーソフトやVBA、SQLなどの キーワードでいろいろ見てみたのですが、実現できそう なもの、方法が見当たりませんでした。 オペレータのPCにはExcel2003が入っているので、VBAで 実現できると一番助かります。 できれば、対象最上位親ディレクトリと同じ階層にVBA 入りのExcelファイルを置き、そのExcelファイルから、 フォーム上に該当情報(リスト対象ディレクトリ指定、 出力先パス指定)を指定後、ボタン一発で出力完了・・・ だと、とっても嬉しいです。 ただ、当方、Excel VBAは、まだ本を読み始めたばかり のド素人でして、HPに掲載されているソースのコピペ を使ってヨチヨチ歩き始めた段階です。 どなたか、お助け頂けませんでしょうか? よろしくお願い申し上げます。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

FSOを使って フォルダーを舐めてしなえばいいように思いますよ あるフォルダーの下位フォルダーをすべて舐めるのであれば dim FSO as Object, oFolder as Object, oSubFolder as Object dim oFile as Object SET FSO = CreateObject("Scripting.FileSystemObject") ' 親フォルダーを取得 for each oFolder in FSO.GetFolder("Directory0828").SubFolders   ' ここで html/imgレベルが取得できます   for each oSubFolder in oFolder.SubFolders     ' ここで A/B/Cレベルが取得できます     for each oFile in oSubFolder.Files       ' ここで File001などが取得できます     next   next next これを使って Dictionaryオブジェクトでファイル名の分類をします 上記のループの外で Dictionaryオブジェクトを生成して Aに存在する場合は 1 Bに存在する場合は 2 Cに存在する場合は 4 といった具合にデータを蓄積すれば どこにどのファイルがあるかを特定できます dim FSO as Object, oFolder as Object, oSubFolder as Object dim oFile as Object dim n as Integer, w as Integer, dic as Object dim k() SET FSO = CreateObject("Scripting.FileSystemObject") ' 結果保持用のDictionaryオブジェクト SET dic = CreateObject("Scripting.Dictionary") ' 親フォルダーを取得 for each oFolder in FSO.GetFolder("Directory0828").SubFolders   ' ここで html/imgレベルが取得できます   ' 分類データの初期化   n = 1   for each oSubFolder in oFolder.SubFolders     ' ここで A/B/Cレベルが取得できます     for each oFile in oSubFolder.Files       ' ここで File001などが取得できます       if dic.Exists( oFile.Name ) then         '同名のファイルが登録してあるなら         w = dic( oFile.Name )         dic.Remove(oFile.Name)         dic.Add oFile.Name, w + n       else         ' 登録がないなら         dic.add oFile.Name n       end if     next     ' 次のフォルダーなのでnを更新     n = n * 2   next next Set oFile = Nothing Set oSubFolder = Nothing Set oFoldr = nothing set FOS = Nothing dim ss as String k = dic.Keys for n = 0 to doc.Count - 1   w = dic( k(n) )   select case w     case 1       ' Aのみ       ss = k(n) ' File001などを取得     case 2       ' Bのみ     case 3       ' AB     case 4       ' Cのみ     case 5       ' AC     case 6       ' BC     case 7       ' ABC   end select next set Dic = Nothing といった具合です html/imgで処理を振り分けるなら dicを配列にするなり別変数にするなど工夫が必要でしょう

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

まずVBといっても、どの言語(VB6,VB200x,VBA,VBS)を使うかですが、 EXCELがあるならVBAが一番簡単です。 ユーザーフォームか又はシートに必要な情報を入力させ、 結果をシート上に書き出せばよいのです。 ディレクトリーやファイルの情報については 「ファイルシステムオブジェクト」というオブジェクトクラス を使えば簡単です。 ご参考 http://hanatyan.sakura.ne.jp/vbhlp/FSO01.htm

graham9999
質問者

補足

即レスありがとうございます。 ただ単にディレクトリ構造をサブ迄含めてファイル一覧として吐き出す スクリプトやフリーソフトは多いようなのですが、条件1)~条件7)を 分けて書き出すところが、どうしてよいのか、さっぱりイメージが できません。(涙) 全てのフォルダに存在するファイルをどうやって抽出し、書き出すか・・・ 特定のフォルダにのみ存在するファイルをどうやって抽出し、書き出すか・・・ で困っております。 各フォルダには、数百のファイルが格納されるため、目視ではとても 重複を追えず、ミスも許されないため、Excelのフィルタなどで人力で 済ますのはできれば避けたく、プログラムでできないものかな・・・と。 Excelでなくても、ただ単にvbsファイル(WSH)でもbatファイルでも 構わないのですが・・・ 引き続き、お力をお貸し頂きたく、お願い申し上げます。

関連するQ&A