- ベストアンサー
複数選択フォルダの配列への格納
- 複数選択でのファイルの配列取り込みは下記でおこなえましたが、tmp = Application.GetOpenFilename(, , "処理したいファイルを複数選択してください", , True) For Z = LBound(tmp) To UBound(tmp) 同じような感じの事をフォルダでしたいのですが・・・
- 具体的には複数選択したフォルダ(年月の名前が付いたフォルダ)が複数個あり、そのフォルダ内に約700個づつファイルがあります。フォルダは年月の名前が付くフォルダなので1年分だと12フォルダ、2年分だと24フォルダになり名前も変わります(201403、201404、201405、・・・・)。ファイルはフォルダの1分毎のデータになりますので名前が変わり、数も多いです。1フォルダ分(1ヶ月なら24時間×28~31日でだいたい700ファイルくらい)なので過去分も含めると月数が増えると手ではちょっとキツイです。
- 対象Folders = 複数選択したフォルダの配列 For Z = LBound(対象Folders) To UBound(対象Folders) 対象files = 複数選択したファルダ内のファイルの配列 For Y = LBound(対象files) To UBound(対象files) ファイルを開いてデータ収集 Next Next 上記のようなイメージの処理をしたいのですが、ご存知の方ご教示いただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 具体的には複数選択したフォルダ(年月の名前が付いたフォルダ)が複数個あり (中略) > フォルダは年月の名前が付くフォルダなので1年分だと12フォルダ、2年分だと24フォルダになり名前も変わります(201403、201404、201405、・・・・) んーと、それだけ規則的にフォルダ名とファイル名がつけられているならば、複数フォルダの選択じゃなく > 年月の名前が付くフォルダ があるフォルダの選択(だけしか行わない)ボタンと処理年月区間の入力、それに処理実行ボタンを持つUIを作った方が楽なんじゃないかなと思いますが。 それなら、 For Z = LBound(処理年月区間) To UBound(処理年月区間) 対象フォルダ名 = 選択したフォルダ \ z の年月を文字列変換したもの 対象files = 対象フォルダ内のファイルの配列 For Y = LBound(対象files) To UBound(対象files) ファイルを開いてデータ収集 Next Next というイメージでできると思いますが。
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
フォルダーを一括で指定することは難しかったと思います。多分普通はできません。 行いことがほぼ分かったので、モジュールを書いてみました。 ○フォルダーの指定は最初の年月と最後の年月から計算しています。 年月の取り込みは検討してください。今はモジュール内に書いています。 また、フォルダーのパスも書いています。変更してください。 ○連続の年月指定でなく任意の年月指定の場合はフォルダーを一つずつ選択しシートに書いたり、シートに記入した年月を処理すればこのモジュールで対応できると思います。 ○ファイルの処理はDirを使って順次処理しています(ファイル名を出力しているだけです)。 ファイル名を配列に格納とかはしていません。 シートのコードウィンドウです。これはコマンドボタンで動かしています。 Private Sub CommandButton1_Click() Dim strPath As String 'フォルダーパス strPath = "L:\999_Test\" 'フォルダー名をセット Dim fromYear As Integer, fromMonth As Integer '開始年月 Dim toYear As Integer, toMonth As Integer '終了年月 Dim ym As Integer '月カウンタ Dim Folder As String '個別フォルダー fromYear = 2014: fromMonth = 3 toYear = 2014: toMonth = 5 Dim fileName As String 'ファイル名 '最初から月を進める For ym = 0 To toYear * 12 + toMonth - (fromYear * 12 + fromMonth) Folder = Format(DateSerial(fromYear, fromMonth + ym, 1), "yyyymm") 'ファイルを開く fileName = Dir(strPath & Folder & "\" & "*.*") While fileName <> "" MsgBox fileName 'ここが実際の処理 fileName = Dir Wend Next End Sub
お礼
お忙しいところ本当にありがとうございます!! 特定のフォルダを指定してそのフォルダ内のサブフォルダのファイルを順次処理していくこととしました!!
お礼
ご回答本当にありがとうございます。 フォルダ名は規則正しいですが、歯抜けで選択することもあり複数選択対象だけを配列に取り込みたいのと、他の作業でも使用したいので、方法はないのでしょうか? 大変お忙しいところお手数ですが、可能ならご教示お願いいたします。