dポイントプレゼントキャンペーン実施中!

複数選択でのファイルの配列取り込みは下記でおこなえましたが、
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ファイルくらい)なので過去分も含めると月数が増えると手ではちょっとキツイです。

3か月分を処理するとして
フォルダ201403、201404、201405を複数選択し
 フォルダ201403の
 ファイル201403010001→201403010002→201403010003・・・ 201403312359
 フォルダ201404の
 ファイル201404010001→201404010002→201404010003・・・201404302359  フォルダ201405の
 ファイル201405010001→201405010002→201405010003・・・201405312359
まで順次ファイルを開いてセルのデータを1ヶ月分毎に収集したいのですが
月数が増えると手ではちょっとキツイので複数フォルダを選択するとフォルダとファイルを配列に取り込み

対象Folders = 複数選択したフォルダの配列
For Z = LBound(対象Folders) To UBound(対象Folders)
    対象files = 複数選択したファルダ内のファイルの配列
     For Y = LBound(対象files) To UBound(対象files)
          ファイルを開いてデータ収集
     Next
Next

上記のようなイメージの処理をしたいのですが
ご存知の方ご教示いただけると幸いです。
よろしくお願いいたします。
OSはWindows7、エクセルは2010です。

A 回答 (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
というイメージでできると思いますが。
    • good
    • 0
この回答へのお礼

ご回答本当にありがとうございます。
フォルダ名は規則正しいですが、歯抜けで選択することもあり複数選択対象だけを配列に取り込みたいのと、他の作業でも使用したいので、方法はないのでしょうか?
大変お忙しいところお手数ですが、可能ならご教示お願いいたします。

お礼日時:2014/06/07 09:21

フォルダーを一括で指定することは難しかったと思います。

多分普通はできません。

行いことがほぼ分かったので、モジュールを書いてみました。

○フォルダーの指定は最初の年月と最後の年月から計算しています。
 年月の取り込みは検討してください。今はモジュール内に書いています。
 また、フォルダーのパスも書いています。変更してください。

○連続の年月指定でなく任意の年月指定の場合はフォルダーを一つずつ選択しシートに書いたり、シートに記入した年月を処理すればこのモジュールで対応できると思います。

○ファイルの処理は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
    • good
    • 0
この回答へのお礼

お忙しいところ本当にありがとうございます!!
特定のフォルダを指定してそのフォルダ内のサブフォルダのファイルを順次処理していくこととしました!!

お礼日時:2014/06/07 19:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!